Java JFrame的BoxLayout

Java JFrame的BoxLayout,java,swing,layout-manager,checkboxlist,Java,Swing,Layout Manager,Checkboxlist,你能帮我了解这里发生了什么事吗。我参考了Javadoc:JFrame有setLayout方法。所以,什么样的分享错误对我来说是个谜 public class View extends JFrame { public View(){ // LayoutManager for the whole frame. this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); } } 结果 线程“main”

你能帮我了解这里发生了什么事吗。我参考了Javadoc:JFrame有setLayout方法。所以,什么样的分享错误对我来说是个谜

public class View extends JFrame {
    public View(){

        // LayoutManager for the whole frame.
        this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
    }
}
结果 线程“main”java.awt.awt中出现异常。错误:无法共享BoxLayout 在javax.swing.BoxLayout.checkContainer(BoxLayout.java:465)中 在javax.swing.BoxLayout.invalidateLayout(BoxLayout.java:249)中 在java.awt.Container.invalidate处(Container.java:1583) 位于java.awt.Component.invalidateIfValid(Component.java:2957) 位于java.awt.Container.setLayout(Container.java:1484) 位于javax.swing.JFrame.setLayout(JFrame.java:605) 查看时。(View.java:16) 在Init.main(Init.java:6) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:483) 位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 试试这个

阅读更多


所有组件都添加到JFrame的内容窗格中

阅读更多

这是JFrame的图示


编辑 从评论中:


嗯,反正也不清楚。我这样分析它:BoxLayout类需要知道它的目标。JFrame有setLayoutt方法,需要知道它的布局

this.setLayout(管理器)
内部调用
getContentPane().setLayout(管理器)

下线

this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
转换为不正确的下一行

this.getContentPane().setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

有关更多详细信息,请参阅

复制:工作。但我什么都不懂。你能澄清一下我到底分享了什么吗?嗯,反正也不清楚。我这样分析它:BoxLayout类需要知道它的目标。JFrame有setLayoutt方法,需要知道它的布局。在所有示例中,我都看到调用setLayout和target to BoxLayout的对象是相同的。如下所示:listPane.setLayout(新的BoxLayout(listPane,BoxLayout.PAGE_轴));这是从好的角度来看的,从这个角度来看,我仍然看不出我应该获取ContentPane的原因。
this.setLayout()
在内部调用
this.getContentPane().setLayout()
,它在JFrame添加组件的内容窗格上应用布局。下面是,我希望您现在明白了。
this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
this.getContentPane().setLayout(new BoxLayout(this, BoxLayout.X_AXIS));