2017-12-31 58 views
0

私はデスクトップアプリケーション用のカスタムJFrameを作成し、タイトルボックスのサブタイトルとして機能するように、アプリケーションの最上部にJPanelを追加しました。問題は、通常の左上の代わりにJPanelの真ん中にあるボタンを追加したときです。それを別の場所に設定しても移動しません。あなたはフレームにBorderLayoutを使用JPanelボタンが正しい場所にない

 JFrame f = new JFrame("Hello"); 
     f.setResizable(true); 
     JPanel pa = new JPanel(); 
     JButton btn = new JButton("Exit"); 

     btn.setBackground(Color.white); 
     btn.setText("Button"); 
     btn.setSize(300, 80); 
     btn.setLocation(50, 0); 

     pa.setBackground(Color.red); 
     pa.setPreferredSize(new Dimension(width,60)); 
     pa.add(btn); 

     f.setBackground(Color.white); 
     f.setUndecorated(true); 
     f.getContentPane().add(pa, BorderLayout.NORTH); 
     f.setSize(new Dimension(width,height)); 
     f.setLocation(200, 200); 
     f.setVisible(true); 
+1

[パネルの使用方法 - レイアウトマネージャの設定](https://docs.oracle.com/javase/tutorial/uiswing/components/panel.html#layout) - > [レイアウトマネージャの使用](https ://docs.oracle.com/javase/tutorial/uiswing/layout/using.html) –

+1

「通常の左上」とは、「どこに行くのか」とか、 "どこにSwingを見たことがありますか?"前者の場合は、Axelの提案([menu](https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html)docs)としてSwingのドキュメントを読んでください。作成する)。後者の場合、意図したとおりに動作しているコンポーネントの例は、比較するのに役立ちます。 – dimo414

答えて

1

: はここのコードです。あなたはパネルで同じことをすることができます。一般的に

pa.setLayout(new BorderLayout()); 
pa.add(btn, BorderLayout.WEST); 

setLocationは、レイアウトマネージャと戦うために傾向があるので、あなたは手ですべてを配置しようとしている場合を除き、あなたは、通常はそれを使用する必要はありません。

+0

それはそれを行う方法の1つですが、BorderLayoutの方法はあまり良い方法ではありません。なぜなら、その隣に別のボタンを追加したいからです。 – tester7281

1

これはその方法の1つですが、BorderLayout方法はそれほど良い方法ではありません。隣に別のボタンも追加したいからです。

この場合、FlowLayoutは、FlowLayout.LEADINGをアラインメントとして使用します。

しかし、一般的なヒントとして:サイズ変更可能な場合

  1. は、より幅の、ASCIIアート又はの単純な描画が最小サイズで(すべて構成要素を示す)GUIのレイアウトを意図提供し、そしてheight - 余分なスペースをどのように使用するかを示します。
  2. より良いヘルプをすぐに投稿するには、 Minimal, Complete, and Verifiable exampleまたはShort, Self Contained, Correct Exampleの投稿を投稿してください。
関連する問題