Aus Ihrer Frage habe ich entnommen, dass Sie die Dimension des Client Area
. Und im SWT-Jargon ist es definiert als a rectangle which describes the area of the receiver which is capable of displaying data (that is, not covered by the "trimmings").
Sie können nicht direkt die Dimension von Client Area
weil es dafür keine API gibt. Sie können dies jedoch mit einem kleinen Hack erreichen. Im folgenden Beispielcode möchte ich, dass mein Kundenbereich wie folgt aussieht 300 by 250
. Um dies zu erreichen, habe ich die shell.addShellListener()
Ereignishörer. Wenn die Shell vollständig aktiv ist (siehe die public void shellActivated(ShellEvent e)
), dann berechne ich die verschiedenen Ränder und lege wieder die Größe meiner Schale fest. Durch das Berechnen und Zurücksetzen der Schalengröße erhalte ich die gewünschte Schalengröße.
>>Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.events.ShellListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
public class MenuTest {
public static void main (String [] args)
{
Display display = new Display ();
final Shell shell = new Shell (display);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.horizontalSpacing = 0;
layout.verticalSpacing = 0;
layout.numColumns = 1;
shell.setLayout(layout);
shell.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,true));
final Menu bar = new Menu (shell, SWT.BAR);
shell.setMenuBar (bar);
shell.addShellListener(new ShellListener() {
public void shellIconified(ShellEvent e) {
}
public void shellDeiconified(ShellEvent e) {
}
public void shellDeactivated(ShellEvent e) {
}
public void shellClosed(ShellEvent e) {
System.out.println("Client Area: " + shell.getClientArea());
}
public void shellActivated(ShellEvent e) {
int frameX = shell.getSize().x - shell.getClientArea().width;
int frameY = shell.getSize().y - shell.getClientArea().height;
shell.setSize(300 + frameX, 250 + frameY);
}
});
shell.open ();
while (!shell.isDisposed()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
}