BoxLayout无法共享错误

时间:2009-04-17 17:18:14

标签: java swing layout 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);
    }
}

4 个答案:

答案 0 :(得分:166)

您的问题是,您为BoxLayoutJFrame)创建了this,但将其设置为JPanelgetContentPane()的布局})。尝试:

getContentPane().setLayout(
    new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);

答案 1 :(得分:71)

我也发现了这个错误:

JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

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

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

这样可行。

答案 2 :(得分:16)

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

JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));

答案 3 :(得分:2)

如果您在java.sql.timestamp上使用布局,请执行以下操作:

JFrame

该控件实际上已添加到JFrame frame = new JFrame(); frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS)); frame.add(new JLabel("Hello World!")); ,因此它看起来像ContentPaneJFrame

之间的“共享”

请改为:

ContentPane