SWT窗口不会显示组件,直到最大化

时间:2015-07-23 09:20:03

标签: java swt

我刚刚学习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);
}

一旦文件打开并加载(它有效),我尝试创建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);

        }
    });
}

它的外观(加载文件并最大化或调整窗口大小后):

analyzer

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

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

1 个答案:

答案 0 :(得分:1)

如果在打开shell后添加或更改控件,则需要重做布局并重新计算shell大小。类似的东西:

shell.layout(true, true);

shell.pack();