0

JFrameに追加したときにJPanelなどのコンポーネントが表示されない理由を教えてください。これが私のコードです:

public class GUI{
static JPanel panel = new JPanel();
private void createAndShowGUI()  {

    final ImageIcon zielonaikona = new ImageIcon("kulazielona.png");
    JFrame frame1 = new JFrame("MasterMind");
    JRadioButton zielony = new JRadioButton(zielonaikona);
    zielony.setSelected(true);
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JButton akceptuj = new JButton("Akceptuj");

    akceptuj.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e)
        {
            JLabel label2 = new JLabel(zielonaikona);            
            panel.add(label2);
        }
    });      


    BoxLayout layout = new BoxLayout(panel, BoxLayout.Y_AXIS);
    panel.add(akceptuj);
    panel.setLayout(layout);
    panel.add(zielony);
    JLabel label = new JLabel (zielonaikona); 
    panel.add(label);
    frame1.getContentPane().add(panel);
    frame1.getContentPane().add(akceptuj);
    frame1.getContentPane().add(zielony);
    frame1.setSize(200, 300);
    frame1.setVisible(true);

}

public static void main(String[] args) {

    GUI kk = new GUI();
    kk.createAndShowGUI();
}
}
4

2 に答える 2

3

コントロールをとに追加すると、コントロールが追加さJFrameJPanel panelた最後のコンテナ、つまりフレームにのみ表示されます。また、デフォルトのBorderLayout.CENTER位置に追加するため、それぞれが最後の位置を置き換えて、1つのコンポーネントのみが表示されたままになります(JRadioButton zielony

修正するには、次の行を削除します。

  frame1.getContentPane().add(akceptuj);
  frame1.getContentPane().add(zielony);

余談ですが、新しいコンポーネントをその場で追加する(つまり、にJLabel追加するActionListener)場合は、次の呼び出しを忘れないでください。

panel.revalidate();
panel.repaint();
于 2012-12-28T22:06:48.353 に答える
1

ボタンとラジオボタンは、パネルとフレームの2回追加されます。フレームにレイアウトを設定していませんが、デフォルトのレイアウトがあると思います。どんな種類か覚えていないだけです。

これが間違っているコードです。

 panel.add(akceptuj);
 panel.add(zielony);

 frame1.getContentPane().add(akceptuj);
 frame1.getContentPane().add(zielony);
于 2012-12-28T22:09:12.593 に答える