【问题标题】:Java SWT: setSize() not working on Button controlJava SWT:setSize() 不适用于按钮控件
【发布时间】:2018-09-23 17:04:32
【问题描述】:

我有一个 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());
}

出了点问题,因为并非所有按钮的大小都相同。 TOGGLE 样式的按钮上的 setSize 方法有什么问题吗?

编辑

我看到buttons.get(buttons.size()-1).getSize() 给出了一个值为 0,0 的点。为什么?

编辑 2

我尝试使用此代码,但没有任何反应!并非所有这些都具有相同的大小。这是为什么呢?

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

【问题讨论】:

    标签: java eclipse button swt windowbuilder


    【解决方案1】:

    您将布局与绝对定位混合在一起,这是行不通的。

    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

    【讨论】:

    • 谢谢@LorisSecuro,但不能为所有按钮设置固定大小,例如 20x20?
    • GridData 有一个带有宽度和高度提示的构造函数,试试吧。
    • 是的,它有效,但在超出限制时设置了 false、false。谢谢洛里斯
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2018-02-25
    • 2017-12-17
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多