JComboBox 的实例

Instance of JComboBox

好吧,当 Jcombox 实例不是代码问题时(我认为)我遇到了问题,只是当 JCombox 实例时,我创建的按钮在我的 Window 中不可见,直到你调整 windows 的大小,它们出现

public class ventana extends JFrame {

        static JCheckBox ch1;
    static JCheckBox ch2;
    static JCheckBox ch3;
    static ButtonGroup bg;
    static JComboBox cb;
public static void main(String[] args) {

    JFrame jf = new JFrame("asd");
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setSize(200,320);
    jf.setLayout(new FlowLayout(FlowLayout.CENTER));
    ch1 = new JCheckBox();
    ch2 = new JCheckBox();
    ch3 = new JCheckBox();
    String [] x= {"1","2","3"};
    cb = new JComboBox(x);
    cb.addItem("Asdd");
    cb.addActionListener(e ->{

    });
    bg = new ButtonGroup();
    bg.add(ch1);
    bg.add(ch2);
    bg.add(ch3);

    jf.add(ch1);
    jf.add(ch2);
    jf.add(ch3);
    jf.add(cb);


}

}

注意:我也尝试使用 JPanel 并且使用 repaint() 也是同样的问题!

注意:该应用程序没有任何功能,我只是想知道如何解决问题

更新:要解决问题,您只需将 "jf.setVisible(true);" 放在末尾即可。

添加所有组件后,将 JFrame 设置为可见。

这是因为您是在将 JFrame 绘制到屏幕后添加组件(通过将可见设置为真),因此如果在添加组件后将可见设置为真,它将使用您添加的组件进行绘制。

它只会在您重新调整 window 大小后才绘制的原因是因为调整 window 的大小会导致它再次绘制(正如@camickr 在评论中提到的那样,会导致布局管理器调用和定位元素,因为你没有给它们一个大小)。

如果您想在将 JFrame 设置为可见后重新绘制它,您还可以使用 jf.revalidate(),然后使用 jf.repaint()

代码:

 JFrame jf = new JFrame("asd");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(200,320);
jf.setLayout(new FlowLayout(FlowLayout.CENTER));
ch1 = new JCheckBox();
ch2 = new JCheckBox();
ch3 = new JCheckBox();
String [] x= {"1","2","3"};
cb = new JComboBox(x);
cb.addItem("Asdd");
cb.addActionListener(e ->{

});
bg = new ButtonGroup();
bg.add(ch1);
bg.add(ch2);
bg.add(ch3);

jf.add(ch1);
jf.add(ch2);
jf.add(ch3);
jf.add(cb);
jf.setVisible(true); //This is where you want to set your JFrame to visible