首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -我应该使用什么样的Swing布局?

Java -我应该使用什么样的Swing布局?
EN

Stack Overflow用户
提问于 2012-01-17 23:06:55
回答 4查看 1.5K关注 0票数 1

今天我有一个小问题,这可能不是专业人士的问题:)

我想让我的Swing组件在一条水平线上。我使用了FlowLayout并根据帧大小更改了componentResized()上组件的大小,但它经常出错(有时最后一个组件放在下一行)……我决定使用BoxLayout,但在该代码上:

代码语言:javascript
复制
    down=new JPanel(new BoxLayout(down,BoxLayout.X_AXIS));
    down.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
    down.add(Box.createHorizontalGlue());
    down.setPreferredSize(new Dimension(300,35));

它崩溃的原因是:

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" java.awt.AWTError: BoxLayout can't be shared
at javax.swing.BoxLayout.checkContainer(Unknown Source)
at javax.swing.BoxLayout.invalidateLayout(Unknown Source)
at javax.swing.BoxLayout.addLayoutComponent(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at ButtonFrame.<init>(chat.java:278)
at chat$1.run(chat.java:20)
aso...

我不知道该怎么做,也许我可以让FlowLayout不能做第二行,或者让盒子布局工作?

感谢您的回复!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-17 23:13:11

Swing tutorial about BoxLayouts复制粘贴

代码语言:javascript
复制
JPanel listPane = new JPanel();
listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));

查看如何首先在没有任何布局的情况下创建面板,然后使用现有面板设置和创建布局。这与您的

代码语言:javascript
复制
down=new JPanel(new BoxLayout(down,BoxLayout.X_AXIS));

调整这一行(使其成为示例中的两个单独的语句)将消除该异常。

哦,对了,BoxLayout应该可以满足您的需求

票数 5
EN

Stack Overflow用户

发布于 2012-01-17 23:15:59

看一看http://www.miglayout.com/,它彻底抛弃了Java本身提供的任何东西。只要你需要做任何复杂的事情,它就会让你的生活变得更容易。

票数 2
EN

Stack Overflow用户

发布于 2012-01-17 23:18:55

FlowLayout或BoxLayout是布局管理器。布局管理器的目标是自动计算组件的位置和大小,因此您不应该直接修改组件的大小。在这里,使用componentResized()会通知您一个组件已经调整了大小。它可能已由布局管理器自动调整大小。如果您在此处修改组件的大小,可能会触发另一个自动布局过程,等等。

为组件指定大小的首选方法是在将组件添加到容器之前设置组件的preferred size

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

https://stackoverflow.com/questions/8896932

复制
相关文章

相似问题

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