-3

複数のボタンを備えたディスプレイを作成しようとしています。ただし、表示されるボタンは 1 つだけです。なぜこうなった?レイアウトマネージャーに何かありますか?どこで私は間違えましたか?

私のコード:

import java.awt.*;
class ButtonDemo extends Frame 
{
    Button[] b;Frame frame;
    ButtonDemo()
    {
        int i=0;
        b=new Button[12];
        frame=new Frame();
        frame.setLayout(new BorderLayout());
        for (i=0;i<12;i++)
        {
            b[i] = new Button("Hello"+i);frame.add(b[i]);
        }
        frame.add(new Button("Hello"));
        frame.add(new Button("polo"));
        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String args[])
    {
        ButtonDemo bd = new ButtonDemo();
    }
}
4

3 に答える 3

3

これは からの予想される動作ですBorderLayout

BorderLayoutでは、使用可能な 5 つの位置のそれぞれに 1 つのコンポーネントのみを配置できます。

同じ位置に 2 つのボタンを追加しているため、最後のボタンのみが表示されます。

試す...

  • BorderLayout.NORTHとのBorderLayout.SOUTH位置に 1 つのボタンを追加する
  • 別のレイアウト マネージャーを使用する

詳細については、A Visual Guide to Layout Managers and Layouting Components within a Containerをご覧ください...

于 2013-08-16T03:07:11.613 に答える
0

まず、コンポーネントをフレームに追加するのではなく、コンテナに追加することをお勧めします。最も簡単な方法は、JPanel をフレームのコンテナに追加してから、後続のコンポーネントをこの JPanel に追加することです。

例えば

    JFrame customFrame = new JFrame();
    JPanel customPanel = new JPanel();
    customPanel.setLayout(new BorderLayout());
    customFrame.getContentPane().add(customPanel);
    //add your buttons to customPanel

第二に、Frame を拡張するカスタム クラス ButtonDemo を作成したのに、なぜ再びフレームを作成するのですか? あなたの場合、直接言うことができます

setLayout(new BorderLayout()); // equivalent to this.setLayout(new BorderLayout());
 add(new Button("polo"));

別のフレームを作成してコンポーネント/レイアウトを追加する代わりに。

フレームのレイアウトを BorderLayout として設定していますが、その機能を使用していません。

frame.setLayout(new BorderLayout());

ボタンを希望の位置(北など)に配置したい場合は、そのように指定する必要があります

frame.add(new Button("Hello"),BorderLayout.NORTH);

繰り返しますが、北の位置に複数のボタンが必要な場合は、パネルをBoxLayout (要件に応じて水平または垂直) で使用し、それにボタンを追加します。

于 2013-08-16T03:57:19.070 に答える