2009-04-17 11 views
107

私はboxlayoutを使用したいこのJava JFrameクラスを持っていますが、java.awt.AWTError: BoxLayout can't be sharedというエラーが出ます。私はこの問題で他の人たちを見てきましたが、コンテンツペインにboxlayoutを作成して解決しましたが、ここでやっています。ここに私のコードは次のとおりです。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); 
    } 
} 

答えて

156

あなたの問題はあなたがJFramethis)についてBoxLayoutを作成しますが、JPanelgetContentPane())のレイアウトとして設定していることです。試してみてください:

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

おかげで、完璧に働いた:もちろんD –

+1

あなたははい –

+5

:-) ...最初getContentPaneを必要とするが、それは今、問題を混乱させる削除しません。それじゃない? –

61

私もこのエラーがこの作り見つけた:

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

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

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

これは動作します。

+0

ちょうどこれに遭遇した。ありがとう! – anon58192932

+0

ちょうど同じ問題があります、ありがとう – Darc

+0

ありがとうございました:D –

13

私は以前の回答からハイライトする一つの重要なことは、BoxLayoutのターゲット(最初のパラメータ)setLayoutの方法は、次の例のように呼び出されているのと同じコンテナでなければならないことであると思う:

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

良い原則=] – dmonopoly

0

あなたは上のレイアウトを使用している場合JFrameのように:それはそれはJFrameとの間で「共有」だように見えます

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

コントロールが実際ContentPaneに追加されています3210

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

JFrame frame = new JFrame(); 
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); 
frame.add(new JLabel("Hello World!")); 
関連する問題