你能帮我理解这里发生了什么。我咨询了Javadoc:JFrame有setLayout方法。那么,分享错误对我来说是一个谜。
public class View extends JFrame {
public View(){
// LayoutManager for the whole frame.
this.setLayout(new BoxLayout(this, BoxLayout.X_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 java.awt.Container.invalidate(Container.java:1583)
at java.awt.Component.invalidateIfValid(Component.java:2957)
at java.awt.Container.setLayout(Container.java:1484)
at javax.swing.JFrame.setLayout(JFrame.java:605)
at View.<init>(View.java:16)
at Init.main(Init.java:6)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
答案 0 :(得分:1)
this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.X_AXIS));
所有组件都添加到JFrame's
内容窗格中。
了解更多Adding Components to the Content Pane
以下是JFrame的图示
来自评论:
嗯,反正不清楚。我这样分析:BoxLayout类需要知道它的目标。 JFrame有setLayoutt方法,需要知道它的布局。
this.setLayout(manager)
在内部调用getContentPane().setLayout(manager);
以下行
this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
转换为不正确的下线。
this.getContentPane().setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
有关详细信息,请查看Source code