java - 组件在 JFrame 中不可见

标签 java swing

您能告诉我,为什么像 JPanel 等组件添加到 JFrame 时不可见吗?这是我的代码:

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();
}
}

最佳答案

您将控件添加到 JFrame 以及 JPanel panel 中,因此它们只会出现在它们所在的最后一个容器中添加了,即框架。另外,由于您将它们添加到默认的 BorderLayout.CENTER 位置,每个组件都会取代最后一个组件,因此您只剩下显示一个组件(JRadioButton zielony) >)

要修复,请删除以下行:

  frame1.getContentPane().add(akceptuj);
  frame1.getContentPane().add(zielony);
<小时/>

旁白:动态添加新组件(即 ActionListener 中添加的 JLabel)时,不要忘记调用:

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

关于java - 组件在 JFrame 中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076341/

相关文章:

java - 如何在java中正确复制对象?

java - 无需身份验证的 GAE + GWT Servlet

java - jsp:UseBean 与 Struts <bean> 标签

java - 在Swing中,有没有办法从工具包中提取预定义的鼠标光标图像?

java - 在 Swing 的按钮组中添加单选按钮时出错

java - NetBeans Swing GUI 生成器 : Background Gradient

java - 我在使用 Java 布局时遇到问题

java - 我想在单击按钮时更新表格

java - 如何修复修复 XXE 漏洞时出现的 JAXB Unmarshal 异常?

java - Hibernate 找不到刚刚创建的表的类映射