Java Swing 中复选框的动态数组列表
Dynamic Arraylist of checkboxes in Java Swing
我正在编写一个用于学生注册的 GUI Java 程序,它将从数据库中检索可用的 类,为用户提供选择 类 的选项,然后将其存储在数据库中.
我正在尝试做的并且到目前为止取得了部分成功,是这个 - 我创建了一个包含可用专业的组合框(从数据库中获取),检索了该专业的可用 类并显示这些 类.
的复选框
这段代码有两个问题。
- 从组合框中选择专业后,复选框不显示。它们只有在我悬停鼠标时才会一一出现。
- 一旦我在组合框中更改我的专业,复选框就不会更新,即使 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;
}
}
编辑
对于我的第二个问题,我调用了 repaint() 并且它起作用了。对于第一个,我做了以下操作:
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);
}
您需要对包含复选框的容器调用重绘和重新验证函数,以使用新的复选框重绘它。
我正在编写一个用于学生注册的 GUI Java 程序,它将从数据库中检索可用的 类,为用户提供选择 类 的选项,然后将其存储在数据库中.
我正在尝试做的并且到目前为止取得了部分成功,是这个 - 我创建了一个包含可用专业的组合框(从数据库中获取),检索了该专业的可用 类并显示这些 类.
的复选框这段代码有两个问题。
- 从组合框中选择专业后,复选框不显示。它们只有在我悬停鼠标时才会一一出现。
- 一旦我在组合框中更改我的专业,复选框就不会更新,即使 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;
}
}
编辑
对于我的第二个问题,我调用了 repaint() 并且它起作用了。对于第一个,我做了以下操作:
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);
}
您需要对包含复选框的容器调用重绘和重新验证函数,以使用新的复选框重绘它。