Java SWT:setSize()在Button控件上不起作用

时间:2018-09-23 17:04:32

标签: java eclipse button swt windowbuilder

我有一个按钮的ArrayList,我试图将所有按钮设置为与最后一个按钮相同的大小。

这是我的代码:

ArrayList <Button> buttons = new ArrayList<Button>();
Composite numbersComposite = new Composite(composite, SWT.NONE);
numbersComposite.setLayout(new GridLayout(5, true));

for (int i=0; i<=49; i++) { 
    Button b = new Button(numbersComposite, SWT.TOGGLE);
    b.setText(""+i);
    buttons.add(b);
}

for (Button b : buttons) {
    b.setSize(buttons.get(buttons.size()-1).getSize());
}

出问题了,因为并非所有按钮的大小都相同。 setSize方法在具有TOGGLE样式的Button上是否有问题?

谢谢

编辑:好的,我看到buttons.get(buttons.size()-1).getSize()给出的点值为0,0。为什么?

编辑2:我尝试使用此代码,但没有任何反应!不是所有的人都一样大小...为什么?

Point point = new Point(20, 20);
for (Button b : buttons) {
    b.setSize(point);
}

1 个答案:

答案 0 :(得分:0)

您正在混合使用绝对定位的布局,这是行不通的。

setSize仅在不使用布局时起作用。

如果使用布局(通常是最佳选择),则应为要显示的组件设置适当的布局数据。

由于您将GridLayout用于父项Composite,因此其子项应将GridData设置为布局数据;例如,此GridData将使按钮使用父Composite中的所有可用空间:

for (int i = 0; i <= 49; i++) {
    Button b = new Button(numbersComposite, SWT.TOGGLE);

    // set the layout data
    GridData buttonLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
    b.setLayoutData(buttonLayoutData);

    b.setText("" + i);
    buttons.add(b);
}

请查看GridData的构造函数,以查看您还有其他选择。

查看此处以了解有关SWT中的布局的更多信息:http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html