将JCheckBox添加到JScrollPane

时间:2013-12-19 12:05:05

标签: java swing jdbc jscrollpane jcheckbox

我正在尝试根据我的数据库中的内容动态添加复选框到滚动窗格。目前我有

ResultSet rs = getAvailableUsers();
    try {
        while (rs.next()){
            User temp = new User();
            temp.setUsername(rs.getString("username"));
            temp.setUserNo(rs.getInt("userno"));
            JCheckBox tempCheckBox = new JCheckBox();
            tempCheckBox.setText(temp.getUsername());
            tempCheckBox.setVisible(true);
            checkBoxes.add(tempCheckBox);

        }
    } catch (SQLException ex) {
        Logger.getLogger(SelectProjectTeamGUI.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println(checkBoxes);

    panel.setLayout(new GridLayout(0,1));
    panel.setVisible(true);
    scrollPane.removeAll();
    scrollPane = new JScrollPane(panel);
    for (int i = 0; i < checkBoxes.size(); i++){
        panel.add(checkBoxes.get(i));
        //panel.repaint();
        System.out.println(i);
    }
    scrollPane.setVisible(true);

我可以看到滚动窗格的轮廓,但没有复选框。所有复选框都存储在一个向量中,然后退回并一次添加到面板中。任何想法为什么它没有显示任何东西?我知道复选框在矢量中,因为我打印出来并在那里看到它们。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

  • 调用panel.removeAll();代替scrollPane.removeAll();

  • 是一个合乎逻辑的问题
  • JComponent已添加到JViewport,但未添加到JScrollPane

  • 然后调用(将所有项目添加到JPanelpanel.revalidate()panel.repaint()作为空白中的最后一行代码

  • 您遇到Concurency in Swing问题,所有已显示Swing GUI的更新必须在Event Dispatch Thread上完成,但在其他人手中panel.repaint()已通知{{1}正确的


  • 使用Event Dispatch Thread(不可编辑)或JList(可编辑)一列(可能删除JTable)而不是JTableHeader一堆{{1}并且通过un_natural滚动,请注意模型中存储了JPanel值,在视图中表示JCheckBoxes