Java Swing 中复选框的动态数组列表

Dynamic Arraylist of checkboxes in Java Swing

我正在编写一个用于学生注册的 GUI Java 程序,它将从数据库中检索可用的 类,为用户提供选择 类 的选项,然后将其存储在数据库中.

我正在尝试做的并且到目前为止取得了部分成功,是这个 - 我创建了一个包含可用专业的组合框(从数据库中获取),检索了该专业的可用 类并显示这些 类.

的复选框

这段代码有两个问题。

  1. 从组合框中选择专业后,复选框不显示。它们只有在我悬停鼠标时才会一一出现。
  2. 一旦我在组合框中更改我的专业,复选框就不会更新,即使 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);
            }

您需要对包含复选框的容器调用重绘和重新验证函数,以使用新的复选框重绘它。