我正在为学生注册写一个GUI Java程序,它将从数据库中检索可用的类,给用户选择类然后将其存储在数据库中的选项。在Java Swing中的复选框的动态Arraylist
我试图做的,迄今已取得了部分成功,是这样的 - 我创建了一个组合框与现有的专业(得到了来自DB),检索到的可用类为主要和显示复选框这些类。
此代码有两个问题。
- 从组合框中选择专业后,复选框不显示。只有当我悬停我的光标时,它们才会一个接一个地出现。
- 一旦我在组合框中更改主菜单,即使eclipse中的控制台显示新创建的主选项的复选框已经创建,复选框也不会更新。
ArrayList<JCheckBox> checkBoxes=new ArrayList<JCheckBox>();
//combox action listener below
public void actionPerformed(ActionEvent e)
{
//get all available classes for the selected major
avail_class = new String[count_class];
//get all available class ids
avail_classid = new String[count_class];
JCheckBox checkbox;
int xdim = 75;
for (int i = 0; i < count_class; i++)
{
checkbox = new JCheckBox(avail_classid[i] + "-" + avail_class[i]);
checkbox.setBackground(new Color(0, 255, 255));
checkbox.setBounds(183, xdim, 289, 23);
contentPane.add(checkbox);
checkBoxes.add(checkbox);
checkbox.setEnabled(true);
xdim = xdim + 50;
}
}
编辑
对于我的第二个问题,我称之为重绘()和它的工作。对于第一个,我做了以下内容:
if(flag < 0)
//flag will be raised whenever there is a change in the selected major. For ex, from web dev to data analytics
for(int i = 0; i < checkBoxes.size(); i++)
{
checkBoxes.get(i).setVisible(false);
System.out.println("old Checkboxes invisible!" + i);
}
你在做什么使无效框架或面板的新复选框?你需要告诉容器布置和显示孩子,每当你改变他们。 – sprinter
'checkbox.setBounds(183,xdim,289,23);'1)Java GUI必须在不同的语言环境中使用不同的PLAF来使用不同的OS',屏幕大小,屏幕分辨率等。因此,它们不利于像素的完美布局。请使用布局管理器或[它们的组合](http://stackoverflow.com/a/5630271/418556)以及[white space]的布局填充和边框(http://stackoverflow.com/a/17874718/ 418556)。 2)为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 –