BoxLayout无法共享错误

111 java layout swing boxlayout

我有这个Java JFrame类,我想在其中使用boxlayout,但是我得到一个错误说法java.awt.AWTError: BoxLayout can't be shared.我见过其他人有这个问题,但是他们通过在contentpane上创建boxlayout来解决它,但这就是我在这里所做的.这是我的代码:

class edit_dialog extends javax.swing.JFrame{
    javax.swing.JTextField title = new javax.swing.JTextField();
    public edit_dialog(){
        setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
        setTitle("New entity");
        getContentPane().setLayout(
            new javax.swing.BoxLayout(this, javax.swing.BoxLayout.PAGE_AXIS));
        add(title);
        pack();
        setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ers 168

您的问题是您正在BoxLayout为a JFrame(this)创建一个,但将其设置为JPanel(getContentPane())的布局.尝试:

getContentPane().setLayout(
    new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);
Run Code Online (Sandbox Code Playgroud)

  • 是的,但删除它会混淆问题,现在不是吗? (5认同)

Joa*_*n M 73

我也发现这个错误:

JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
Run Code Online (Sandbox Code Playgroud)

将JPanel传递给BoxLayout时,JPanel尚未初始化.所以这样分开这一行:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
Run Code Online (Sandbox Code Playgroud)

这会奏效.


小智 16

我认为从前面的答案中强调的一件重要事情是BoxLayout的目标(第一个参数)应该与调用setLayout方法的Container相同,如下例所示:

JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));
Run Code Online (Sandbox Code Playgroud)


Cha*_*lie 12

如果您在JFrame类似的情况下使用布局:

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));
Run Code Online (Sandbox Code Playgroud)

控件实际上被添加到了,ContentPane所以它看起来像是在JFrame和之间“共享”ContentPane

改为这样做:

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));
Run Code Online (Sandbox Code Playgroud)

  • 你救了我,-为什么这是唯一提到 getContentPane() 的答案? (3认同)