Java awt.AWTError:BoxLayout可以';不能分享
在设置它们的布局之前,我已经初始化了MotePanel、Command Panel和LEDPanel,那么我是如何得到这个异常的呢 请帮忙Java awt.AWTError:BoxLayout可以';不能分享,java,swing,layout-manager,Java,Swing,Layout Manager,在设置它们的布局之前,我已经初始化了MotePanel、Command Panel和LEDPanel,那么我是如何得到这个异常的呢 请帮忙 Exception in thread "main" java.awt.AWTError: BoxLayout can't be shared at javax.swing.BoxLayout.checkContainer(BoxLayout.java:462) at javax.swing.BoxLayout.invalidateLayou
Exception in thread "main" java.awt.AWTError: BoxLayout can't be shared
at javax.swing.BoxLayout.checkContainer(BoxLayout.java:462)
at javax.swing.BoxLayout.invalidateLayout(BoxLayout.java:246)
at javax.swing.BoxLayout.addLayoutComponent(BoxLayout.java:279)
at java.awt.Container.addImpl(Container.java:1107)
at java.awt.Container.add(Container.java:974)
at javax.swing.JFrame.addImpl(JFrame.java:556)
at java.awt.Container.add(Container.java:377)
at Window.<init>(Window.java:54)
线程“main”java.awt.awt中出现异常。错误:无法共享BoxLayout
位于javax.swing.BoxLayout.checkContainer(BoxLayout.java:462)
在javax.swing.BoxLayout.invalidateLayout(BoxLayout.java:246)中
位于javax.swing.BoxLayout.addLayoutComponent(BoxLayout.java:279)
位于java.awt.Container.addImpl(Container.java:1107)
在java.awt.Container.add处(Container.java:974)
位于javax.swing.JFrame.addImpl(JFrame.java:556)
在java.awt.Container.add处(Container.java:377)
在窗口。(Window.java:54)
公共类窗口扩展JFrame{
私人杰帕内尔汽车旅馆;
私人JPanel-LEDPanel;
私人JPanel命令面板;
私人JCheckBox微尘[];
专用JRadioButton发光二极管[];
公共窗口(){
this.setLayout(新的BoxLayout(this,BoxLayout.X_轴));
本集标题为“传感器网络实验室”;
这个.设置大小(300200);
此.setLocationRelativeTo(空);
此.setDefaultCloseOperation(关闭时退出);
MotePanel=新JPanel();
LEDPanel=新的JPanel();
CommandPanel=newjpanel();
motes=新的JCheckBox[10];
LED=新的JRadioButton[3];
MotePanel.setLayout(新的BoxLayout(MotePanel,BoxLayout.Y_轴));
setLayout(新的BoxLayout(CommandPanel,BoxLayout.Y_轴));
LED面板.setLayout(新的BoxLayout(LED面板,BoxLayout.Y_轴));
System.out.println(“创建MotePanel”);
对于(int i=0;i在JFrame上调用setLayout时,实际上是将布局添加到JFrame的contentPane,而不是JFrame本身,因为此方法更方便,可以将方法调用传输到contentPane。BoxLayout构造函数必须反映这一点,因为不能将BoxLayout添加到一个容器中,然后作为另一个容器中有一个参数。请更改此参数:
this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
为此:
setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
另外:不需要所有的this.
业务,因为this.是隐含的,而且这里也没有实际需要扩展JFrame
编辑:以下代码是演示错误及其解决方案所需的全部代码:
import javax.swing.*;
public class BoxLayoutFoo extends JFrame {
public BoxLayoutFoo() {
// swap the comments below
setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS)); // comment out this line
//setLayout(new BoxLayout(getContentPane(), BoxLayout.LINE_AXIS)); // uncomment this line
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
new BoxLayoutFoo();
}
}
您应该使用JFrame的contentPane设置BoxLayout,而不是JFrame本身-
this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.X_AXIS));
而不是
this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
我相信这会让事情变得更清楚,只是试着更明确地说明你的代码:this.getContentPane().setLayout(新的BoxLayout(this.getContentPane(),BoxLayout.Y_轴));
this.add(MotePanel);我试过这个.getContentPane().add(MotePanel)即使这样也会产生同样的错误…我不知道我在这里做错了什么。+1-较慢,但与往常一样正确。但我正在为MotePanel、LEDPanel和CommandPanel设置布局,而不是“this”为了消除错误,我应该做些什么更改…@anupash:请运行您的代码并检查哪一行导致了错误。这将解释很多,让您更清楚。我甚至注释掉了MotePanel.setLayout、LEDPanel.setLayout和CommandPanel.setLayout,但仍然是相同的异常…@anupash:请再次检查哪一行导致了错误ine导致错误。@Hovercraft…我的代码中的第54行是“this.add(MotePanel);”
this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS));