首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java SWT: setSize()不适用于按钮控件

Java SWT: setSize()不适用于按钮控件
EN

Stack Overflow用户
提问于 2018-09-24 01:04:32
回答 1查看 1.3K关注 0票数 1

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

这是我的代码:

代码语言:javascript
复制
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方法有什么问题吗?

编辑

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

编辑2

我试着用这段代码,但是什么也没发生!它们并不都有相同的大小。为什么会这样呢?

代码语言:javascript
复制
Point point = new Point(20, 20);
for (Button b : buttons) {
    b.setSize(point);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-24 01:21:59

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

仅当您不使用布局时,setSize才会起作用。

如果您正在使用布局(这通常是最佳选择),那么您应该为要显示的组件设置适当的布局数据。

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

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52468380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档