Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java awt.AWTError:BoxLayout可以';不能分享_Java_Swing_Layout Manager - Fatal编程技术网

Java awt.AWTError:BoxLayout可以';不能分享

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

在设置它们的布局之前,我已经初始化了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.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));