web-dev-qa-db-ja.com

BoxLayoutを共有できないエラー

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

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);
    }
}
111
Ulrik

あなたの問題は、BoxLayoutJFrame)のthisを作成しているが、それをJPanelgetContentPane())。試してください:

getContentPane().setLayout(
    new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);
166
Michael Myers

私はこれを行うこのエラーも見つけました:

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

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

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

これは動作します。

72
Joaquín M

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

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

JFrameのようなレイアウトを使用している場合:

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));

コントロールは実際にContentPaneに追加されているため、JFrameContentPaneの間で「共有」されているように見えます。

代わりにこれを行います:

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));
4
Charlie