gpt4 book ai didi

java - SWT 窗口在最大化之前不显示组件

转载 作者:行者123 更新时间:2023-12-01 11:17:50 24 4
gpt4 key购买 nike

我刚刚学习 SWT,遇到了一些问题。我有一个菜单,其中有两个元素"file"和“帮助”。在文件中有两个项目“打开文件”和“退出”

加载文件后(使用“打开文件”),它应该打印一个组合和一个标签,但它不会显示,除非我调整窗口大小(或最大化)。我做错了什么?

开放显示

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);
}

文件打开并加载后(它可以工作),我尝试创建组合和标签

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);

}
});
}

这就是它的样子(加载文件并最大化或调整窗口大小后):

analyzer

此外,如果您发现任何错误,请告诉我。这是我的第一个 GUI 程序,我不明白布局如何工作以及元素如何显示。我想要一行(其中组合)来显示一些信息,一旦选择了一个项目,就绘制窗口,不确定应该使用哪个布局。我可能会为此问另一个问题。

PD:看起来图像无法加载(不知道为什么),但总是失败。这是一个链接:http://s28.postimg.org/4v7k34dzx/Analyzer.png

最佳答案

如果在打开外壳后添加或更改外壳上的控件,则需要重做布局并重新计算外壳大小。像这样的东西:

shell.layout(true, true);

shell.pack();

关于java - SWT 窗口在最大化之前不显示组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31583154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com