1

JPanel、ウィンドウ、および JPanel と JLabels の配列があります。JFrame に 5 つの JPanel を追加し、各 JPanel に JLabel を追加したいと考えています。各 JPanel は、Dice に関するデータを表すために使用されます。

ただし、コードを実行すると、最後の JPanel のみが JFrame に「Dice 4」というテキストで表示されます。理由がわかりません。

コード:

public static void main(String args[]) {

    JFrame window = new JFrame("DICE Frame");
    window.setVisible(true);
    window.setTitle("DIE");
    window.setSize(400, 200);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel[] diceView=new JPanel[5];
    JLabel[] labels=new JLabel[5];
    for(int i=0; i<diceView.length; i++) {

        diceView[i]=new JPanel();

        window.add(diceView[i]);

        labels[i]=new JLabel();
        labels[i].setText("Dice "+i);
        diceView[i].add(labels[i]);

    }
}
4

3 に答える 3

3

JFrame の contentPane ( を呼び出すときに追加するものJFrame#add(...)) はデフォルトで BorderLayout を使用し、デフォルトの方法でコンポーネントを追加すると、そのコンポーネントは BorderLayout.CENTER に追加されます。

解決策は、必要と思われるレイアウトを使用する JPanel (またはレイアウトを使用するネストされた JPanel) に他の JPanel を追加してから、このコンテナー JPanel を JFrame の BorderLayout.CENTER に追加することです。

詳細については、レイアウト マネージャーのチュートリアルをご覧ください。理解すべき重要な概念は、それぞれが独自のシンプルなレイアウト マネージャーを使用して JPanel をネストできるため、シンプルで使いやすいレイアウト マネージャーのみを使用して複雑なレイアウトを実現できるということです。

于 2013-10-17T22:43:50.307 に答える
2

JPanels が何度も追加され、Dice 0、Dice 1、Dice 2、Dice 3 が Dice 4 の下にとどまるため、Dice 4 のみが表示されます。他の Dice を表示する場合は、flowlayout、boxlayout などのレイアウトを使用する必要があります。

于 2013-10-17T22:43:53.587 に答える
2

デフォルトJFrameが指定されていBorderLayoutます。次のような別のレイアウトを使用してみてください。

window.setLayout(new FlowLayout());

他の JPanel が表示されます。 より詳細な情報については、これをチェックしてください

于 2013-10-17T22:48:45.647 に答える