2014-09-04 76 views
1

你好,我有这个问题。我正在尝试创建2个面板。一个在BoxLayout中将标签堆叠在另一个的顶部,另一个带有TextFields的面板也与BoxLayout堆叠起来并与标签对应。我尝试了各种设置,并不断收到错误。问题JPanel,JFrame,BoxLayout

我在JFrame的设置布局的FlowLayout()

,并以此来设置面板的layoutManager

leftPanel = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS)); 

这是我已经没有问题做过。现在有什么问题?

错误:

Exception in thread "main" java.awt.AWTError: BoxLayout can't be shared 
at javax.swing.BoxLayout.checkContainer(BoxLayout.java:465) 
at javax.swing.BoxLayout.invalidateLayout(BoxLayout.java:249) 
at javax.swing.BoxLayout.addLayoutComponent(BoxLayout.java:282) 
at java.awt.Container.addImpl(Container.java:1125) 
at java.awt.Container.add(Container.java:415) 
at DataWriteExample.BuildLeftPanel(DataWriteExample.java:37) 
at DataWriteExample.<init>(DataWriteExample.java:24) 
at DataWriteExample.main(DataWriteExample.java:58) 
Java Result: 1 
+0

['公众的BoxLayout( C ontainer target,int axis)' - >'target - 需要布置的容器'](http://docs.oracle.com/javase/8/docs/api/javax/swing/BoxLayout.html#BoxLayout -java.awt.Container-int-) – 2014-09-04 04:34:18

回答

4

你可以试试这个:

leftPanel = new JPanel(); 
leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS)); 

更新

问题与您的代码是:

leftPanel = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS)); 
-------------------------------------^ 
// here `this` is not leftPanel, I believe its the JFrame instance 
// hence your getting the exception of cannot share the layout 
+0

为什么这个工作,但你不能将它添加到构造函数?你的方法解决了我的问题,但为什么?我可以发誓我以前在构造函数中使用它。 – 2014-09-04 04:39:08

+0

@Code_Help,请检查更新 – Arvind 2014-09-04 04:44:01

+0

嘿,如果我尝试添加作为构造函数与leftPanel而不是这我仍然得到相同的错误。将它拆分到下一行可以解决问题。我应该能够将布局管理器添加到JPanel构造函数中吗? – 2014-09-04 04:48:07