0

3番目のボタンのサイズを他の2つのボタンと同じサイズにして、下部に配置する方法に悩まされています。

class ControlFrame extends JFrame 
    implements Runnable
{
    JButton jb_inc = new JButton();
    JButton jb_zero = new JButton();
    JButton jb_dec = new JButton();

    ControlFrame() {
        super("Control Frame");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    ControlFrame(int x,int y, int w, int h) {
        this();
        this.setBounds(x, y, w, h);
        this.setVisible(true);

        jb_inc.setBounds(10,10,90,20);
        jb_zero.setBounds(10,40,90,20);
        jb_dec.setBounds(10,60,90,20);

        jb_inc.setVisible(true);
        jb_zero.setVisible(true);
        jb_dec.setVisible(true);

        this.getContentPane().add(jb_inc);
        this.getContentPane().add(jb_zero);
        this.getContentPane().add(jb_dec);

    }

    public void run() {
    }
}

public class Counting_Machine 
{
    public static void main(String[] args) {
        ControlFrame cf = new ControlFrame(0,200,80,150);
    }
}
4

3 に答える 3

2

レイアウトマネージャーの使用に関するSwingチュートリアルのセクションを読むことから始めることをお勧めします.BorderLayoutの「中心」に3つのコンポーネントを追加しようとしているため、コードは機能しません。ニーズにより適した LayoutManager を選択してください。

レイアウト マネージャーを使用する場合は、setBounds(...) メソッドを使用する必要はありません。レイアウト マネージャーの仕事は、レイアウト マネージャーのルールに基づいてコンポーネントを配置することです。ボタンにテキストを追加していないため、各ボタンの推奨サイズは同じにする必要があります。

また、ボタンで setVisible() を呼び出す必要はありません。最上位のコンテナ (JFrame、JDialog) を除いて、すべての Swing コンポーネントがデフォルトで表示されます。

于 2009-12-24T15:50:06.840 に答える
0

すべてに境界を設定しているため、LayoutManager はまったく必要ありません。LayoutManager を null に設定すると、例のようにすべてを自分で配置できます。

this.setLayoutManager(null)
于 2009-12-24T16:13:11.500 に答える
0

2 つの提案:

1) 共通のものをインスタンス初期化ブロックに入れます。個人的には、「this()」の呼び出しを見るたびにぞっとします。

{ this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); }

ControlFrame() { super("コントロール フレーム"); }

ControlFrame(int x,int y, int w, int h) { super("コントロール フレーム"); ... }

2) x、y、w、h コンストラクターを削除します...個人的には、画面サイズを把握し、渡された値を使用してウィンドウを作成する「位置」メソッドを持つ WindowUtils というクラスがあります。それは画面の相対的なサイズです。次に、ウィンドウを作成するコードがそれを呼び出します。私はできるだけ少ないコンストラクターを持つことを好みます (非常に多くの場合、それは 0 または 1 であり、2 つ以上を持つことはめったにありません)。

3) this.getContentPane().add(jb_inc); add(jb_inc); のように記述できるようになりました。-JDK 1.5以降だと思います。

4) コンストラクター内でオーバーライド可能なメソッド (これまでに持っていたすべてのもの) を呼び出さないでください。サブクラスが「追加」をオーバーライドすると、問題が発生する可能性があります。したがって、super.add() を呼び出すか、別のメソッドで追加を行うか、クラスを final にすることができます。

今あなたの質問に答えるために... :-)

必要なものを取得するには、LayoutManagersを利用する必要があります。

必要なものに応じて、おそらく BorderLayout を使用して、下部にボタンを表示できるようにします。

于 2009-12-24T15:51:19.547 に答える