今天我有一个小问题,这可能不是专业人士的问题:)
我想让我的Swing组件在一条水平线上。我使用了FlowLayout并根据帧大小更改了componentResized()上组件的大小,但它经常出错(有时最后一个组件放在下一行)……我决定使用BoxLayout,但在该代码上:
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));它崩溃的原因是:
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不能做第二行,或者让盒子布局工作?
感谢您的回复!
发布于 2012-01-17 23:13:11
从Swing tutorial about BoxLayouts复制粘贴
JPanel listPane = new JPanel();
listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));查看如何首先在没有任何布局的情况下创建面板,然后使用现有面板设置和创建布局。这与您的
down=new JPanel(new BoxLayout(down,BoxLayout.X_AXIS));调整这一行(使其成为示例中的两个单独的语句)将消除该异常。
哦,对了,BoxLayout应该可以满足您的需求
发布于 2012-01-17 23:15:59
看一看http://www.miglayout.com/,它彻底抛弃了Java本身提供的任何东西。只要你需要做任何复杂的事情,它就会让你的生活变得更容易。
发布于 2012-01-17 23:18:55
FlowLayout或BoxLayout是布局管理器。布局管理器的目标是自动计算组件的位置和大小,因此您不应该直接修改组件的大小。在这里,使用componentResized()会通知您一个组件已经调整了大小。它可能已由布局管理器自动调整大小。如果您在此处修改组件的大小,可能会触发另一个自动布局过程,等等。
为组件指定大小的首选方法是在将组件添加到容器之前设置组件的preferred size。
https://stackoverflow.com/questions/8896932
复制相似问题