2016-04-11 10 views
0

This is the output I want pretty muchプログラムのボタンを真ん中に合わせる必要があります。現在のコードは実行していますが、プログラムの大きさのボタンが表示されています。特定のサイズの中央ボタンが必要です私はそれがどこで、どのように大きな部品がレイアウトされる方法を定義することLayoutManagerあるJButtonの整列

/** 
* Created by Timk9 on 11/04/2016. 
*/ 
import javax.swing.*; 
import java.awt.*; 
public class Test extends JFrame { 

{ 
    JFrame window = new JFrame("Test"); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setResizable(true); 
    window.setSize(600, 600); 
    window.setVisible(true); 
    window.setLocationRelativeTo(null); 

    JPanel p = new JPanel(new GridBagLayout()); 
//Button does not appear until I resize the program? 
    JButton b1 = new JButton("Click here"); 
GridBagConstraints c = new GridBagConstraints(); 

    p.add(b1); 
    window.add(p); 

     } 

public static void main(String[] args) { 
new Test(); 

    } 

} 
+0

なぜレイアウトマネージャを設定する前にボタンをウィンドウに追加していますか? – FredK

+0

なぜインスタンスイニシャライザブロックを使用していて、コンストラクタを使用していないのですか? –

+0

borderLayoutを使用し、中央に配置します。 – dijam

答えて

1

を試みたものです。 GridLayout eを使用しています。 g。利用可能なスペースを等グリッドフィールドで分割し、コンポーネントがこのスペースを完全に埋めるようにします。これは、ボタンがアプリケーションと同じくらい大きいからです。 LayoutManagersの詳細については、こちらを参照してください。https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

Btwあなたのコードはコンパイルできません:new JButton("he"),JButton.ALIGN_CENTER)

3
JPanel p = new JPanel(new GridBagLayout()); 

あなたがコンポーネントを中央に使用するための良いレイアウトマネージャでのGridBagLayoutとパネルを作成します。

p.add(b1); 

ただし、制約を使わずにボタンをパネルに追加します。

コードは次のようになります。私は、プログラムのサイズを変更するまで

p.add(b1, c); 

//ボタンが表示されないのですか?

フレームが表示される前に、すべてのコンポーネントをフレームに追加する必要があります。 setVisible(...)ステートメントは、コンストラクターの最後のステートメントでなければなりません。

はまた、あなたはどの部分が、私は私はあなたのコードを構造化するためのより良い方法をHow to Make FramesにSwingのチュートリアルからFrameDemo例を参照してくださいコンストラクタ

を使用していたインスタンス初期化子ブロックと考えられていると指摘でしたスイングの慣習に従ってください。作業コードから始めて、JLabelを使用する代わりに、ボタンを含むパネルを追加するための変更を行います。 getContentPane()メソッドを使用する必要はなくなりました。パネルをフレームに直接追加するだけで済みます。