您能告诉我,为什么像 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/