Java JFrame的BoxLayout
你能帮我了解这里发生了什么事吗。我参考了Javadoc:JFrame有setLayout方法。所以,什么样的分享错误对我来说是个谜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”
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));