Я пробую SWT в первый раз, и я не могу понять, как использовать строку меню вместе с любым заполнением пробела.Компоновка композита рассчитывается без учета меню, поэтому после добавления меню нижняя часть макета обрезается.
Удивительно, но при изменении размера пользователя меню учитывается и макетхорошо.Но я не могу понять, как это исправить программно;shell.layout(true,true)
, shell.setSize(250,250)
, shell.pack()
не решайте проблему.
package com.appspot.htmldoodads.pdfstuffs;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
public class MenuLayout {
public static void main(String[] argv) {
final Display display = new Display();
final Shell shell = new Shell(display);
GridLayout shellLayout = new GridLayout();
shell.setLayout(shellLayout);
// Add a menu bar with File -> Open...
Menu bar = new Menu(shell, SWT.BAR);
shell.setMenuBar(bar);
MenuItem fileItem = new MenuItem(bar, SWT.CASCADE);
fileItem.setText("&File");
Menu subMenu = new Menu(shell, SWT.DROP_DOWN);
fileItem.setMenu(subMenu);
MenuItem openItem = new MenuItem(subMenu, SWT.CASCADE);
openItem.setText("&Open...");
// Add a button that fills the space.
Button big = new Button(shell, SWT.PUSH);
big.setText("Fill.");
GridData bigLayoutData = new GridData(GridData.FILL, GridData.FILL, true, true);
big.setLayoutData(bigLayoutData);
// Add a button that doesn't fill space.
new Button(shell, SWT.PUSH).setText("Regular");
shell.layout(true, true);
shell.setSize(250,250);
shell.open();
while ( ! shell.isDisposed ()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}