组件在JFrame中不可见

时间:2012-12-28 21:59:06

标签: java swing

请告诉我,为什么添加到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();
}
}

2 个答案:

答案 0 :(得分:3)

您将控件添加到JFrame以及JPanel panel,因此它们只会显示在添加它们的最后一个容器中,即框架。另外,因为您将它们添加到默认的BorderLayout.CENTER位置,每个位置都会替换最后一个位置,因此您只剩下一个显示的组件(JRadioButton zielony

要修复,请删除以下行:

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

旁白:在动态添加新组件 (即JLabel中添加的ActionListener)时,请不要忘记致电:

panel.revalidate();
panel.repaint();

答案 1 :(得分:1)

按钮和单选按钮两次添加到面板和框架。您没有在框架上设置布局,但我认为它有一个默认布局。我只是不记得是什么样的。

这是你的代码错误。

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

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