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
好吧,当 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