问题描述
我正在学习SWT,但遇到了一些问题。 我有一个菜单,其中有两个元素“文件”和“帮助”。 在文件中有两个项目“打开文件”和“退出”
加载文件后(使用“打开文件”),它应该打印一个Combo和一个Label,但是除非我调整窗口大小(或最大化),否则它不会显示。 我做错了什么?
打开显示
public Shell open (Display display) {
this.display = display;
initResources();
this.shell = new Shell(display);
createShellContents();
shell.open();
return shell;
}
选单
public void createShellContents() {
shell.setText(getResourceString("window.title"));
shell.setImage(appIcon);
shell.setLayout(new FillLayout());
Menu bar = new Menu(shell, SWT.BAR);
shell.setMenuBar(bar);
createFileMenu(bar);
createHelpMenu(bar);
}
打开并加载文件后(可以正常工作),我尝试同时创建Combo和Label
private void createLayout () {
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
gridLayout.marginHeight = gridLayout.marginWidth = 0;
shell.setLayout(gridLayout);
GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gridData.widthHint = 185;
createComboView(shell, gridData);
Label numObjectsLabel = new Label(shell, SWT.BORDER);
gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
gridData.widthHint = 185;
numObjectsLabel.setLayoutData(gridData);
numObjectsLabel.setText("Sample");
}
private void createComboView(Composite parent, Object layoutData) {
Label labelGame = new Label(parent, 0);
labelGame.setText("Game: ");
combo = new Combo(parent, SWT.NONE);
combo.setLayoutData(layoutData);
String[] gamesStr = null;
if (games != null && !games.isEmpty()) {
System.out.println("Games has " + games.size());
gamesStr = new String[games.size()];
for (int i = 0; i < games.size(); i++) {
gamesStr[i]= "GAME " + String.valueOf(games.get(i).getId());
}
combo.setItems(gamesStr);
}
else {
System.out.println("NO GAMES");
}
combo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
int k = combo.getSelectionIndex();
System.out.println("Selected" + k);
}
});
}
这是它的外观(在加载文件并最大化或调整窗口大小之后):
此外,如果您发现任何错误,请告诉我。 这是我的第一个GUI程序,我不了解布局如何工作以及如何显示元素。 我想要一行(组合在哪里)显示一些信息,一旦选择了一个项目,请绘制窗口,不确定我应该使用哪个布局。 我可能会问另一个问题。
PD:看起来图像无法加载(不知道为什么),但是总是失败。 这是链接: :
1楼
如果在打开外壳后在外壳上添加或更改控件,则需要重做布局并重新计算外壳大小。 就像是:
shell.layout(true, true);
shell.pack();