122

JFrameボックスレイアウトを使用したいこのJavaクラスがありますが、 java.awt.AWTError: BoxLayout can't be shared. この問題を抱えている他の人を見たことがありますが、コンテンツペインにボックスレイアウトを作成することで解決しましたが、それが私がここで行っていることです。これが私のコードです:

class EditDialog extends JFrame {
    JTextField title = new JTextField();
    public editDialog() {
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setTitle("New entity");
        getContentPane().setLayout(
            new BoxLayout(this, BoxLayout.PAGE_AXIS));
        add(title);
        pack();
        setVisible(true);
    }
}
4

4 に答える 4

187

問題は、()のaを作成しているが、(BoxLayout)のレイアウトとして設定していることです。試す:JFramethisJPanelgetContentPane()

getContentPane().setLayout(
    new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);
于 2009-04-17T17:26:04.690 に答える
81

私はまた、これを行うこのエラーを発見しました:

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

JPanel は、BoxLayout に渡すときにまだ初期化されていません。したがって、この行を次のように分割します。

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

これは機能します。

于 2010-07-27T19:30:40.753 に答える
17

前の回答から強調すべき重要な点の 1 つは、次の例のように、BoxLayout のターゲット (最初のパラメーター) が、setLayout メソッドが呼び出されるコンテナーと同じである必要があることです。

JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));
于 2011-09-07T20:46:06.910 に答える