2

Swing を使用していて、同じコンポーネントを複数のパネルに追加しようとしています。ただし、最後にフレームに追加したパネルだけにこれらのボタンがあります。p2、p3、および p4 に同じラベル/テキストフィールドのセットを追加しています。しかし、ラベル/テキストフィールドを最後に p4 に追加したため、p4 のみが表示されているようです。これらのコンポーネントを複数の JPanel で再利用するにはどうすればよいのでしょうか?異なるパネルごとに大量のコンポーネントを作成する必要はありません。

私が使用しているコード:

public class TriangleGUI extends JFrame implements ActionListener
{
    static JPanel p1, p2, p3,p4,p5;
    static JButton b1, b2, b3;
    static JLabel label1, label2, label3;
    static JTextField tf1, tf2, tf3;
    private static int side1, side2, side3, angle1, angle2, angle3; 
    public TriangleMadnessGUI(){
        setSize(800,400);
        p1 = new JPanel();
        p2 = new JPanel();
        p3 = new JPanel();
        p4 = new JPanel();

        b1 = new JButton("1 Side, 2 Angles"); //buttons
        b2 = new JButton("1 Angle, 2 Sides");
        b3 = new JButton("3 Sides");

        label1 = new JLabel("Angle 1");       //labels which i intend to reuse                                                 
        label2 = new JLabel("Angle 2");
        label3 = new JLabel("Side 1");

        tf1 = new JTextField("",5);           //textfields which i intend to reuse
        tf2 = new JTextField("",5);
        tf3 = new JTextField("",5);

        p1.add(b1);
        p1.add(b2);
        p1.add(b3);

        p2.add(label1);  //panel 2, add set of components
        p2.add(tf1);
        p2.add(label2);
        p2.add(tf2);
        p2.add(label3);
        p2.add(tf3);

        p3.add(label1);  //panel 3, adding set of same components
        p3.add(tf1);
        p3.add(label2);
        p3.add(tf2);
        p3.add(label3);
        p3.add(tf3);

        p4.add(label1);  //panel 4, adding set of same components
        p4.add(tf1);
        p4.add(label2);
        p4.add(tf2);
        p4.add(label3);
        p4.add(tf3);

        add(p1, BorderLayout.NORTH);
        add(p4, BorderLayout.CENTER);   // <-----HERE, only p4 has visible buttons
                                        // p2 and p3 are just blank if used in here.
        setVisible(true);
    }
}
4

2 に答える 2

1

JFrameデフォルトで a を使用BorderLayoutします。

BorderLayout使用可能な 5 つのスロットのそれぞれに対して 1 つのコンポーネントのみが表示されます。つまり、特定のスポットに最後に追加されたコンポーネントのみが表示されます。

詳細については、コンテナ内のコンポーネントのレイアウトをご覧ください。

于 2013-10-31T03:37:44.793 に答える