これは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);
}
}
あなたの問題は、BoxLayout
(JFrame
)のthis
を作成しているが、それをJPanel
(getContentPane()
)。試してください:
getContentPane().setLayout(
new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);
私はこれを行うこのエラーも見つけました:
JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
JPanelは、BoxLayoutに渡すときにまだ初期化されていません。したがって、この行を次のように分割します。
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
これは動作します。
前の回答から強調すべき重要なことの1つは、BoxLayoutのターゲット(最初のパラメーター)が、次の例のようにsetLayoutメソッドが呼び出されるのと同じContainerであるべきだと思うことです。
JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));
JFrame
のようなレイアウトを使用している場合:
JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));
コントロールは実際にContentPane
に追加されているため、JFrame
とContentPane
の間で「共有」されているように見えます。
代わりにこれを行います:
JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));