Java 将JCheckBox添加到JScrollPane

Java 将JCheckBox添加到JScrollPane,java,swing,jdbc,jscrollpane,jcheckbox,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"));

我试图根据数据库中的内容动态地向滚动窗格添加复选框。目前我有

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);
ResultSet rs=getAvailableUsers();
试一试{
while(rs.next()){
用户临时=新用户();
临时设置用户名(rs.getString(“用户名”);
临时setUserNo(rs.getInt(“userno”);
JCheckBox tempCheckBox=新的JCheckBox();
tempCheckBox.setText(temp.getUsername());
tempCheckBox.setVisible(true);
复选框。添加(临时复选框);
}
}catch(SQLException-ex){
Logger.getLogger(选择projectteamgui.class.getName()).log(Level.SEVERE,null,ex);
}
System.out.println(复选框);
panel.setLayout(新网格布局(0,1));
面板设置可见(真);
scrollPane.removeAll();
scrollPane=新的JScrollPane(面板);
对于(int i=0;i
我可以看到滚动窗格的轮廓,但没有任何复选框。所有复选框都存储在一个向量中,然后一次一个地拉出并添加到面板中。你知道为什么它什么都没显示吗?我知道复选框在向量中,因为我已经打印出来并在那里看到了它们

提前感谢您的帮助。

  • 调用
    panel.removeAll()有一个逻辑问题而不是
    滚动窗格.removeAll()

  • JComponent
    被添加到
    JViewport
    而不是
    JScrollPane

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

  • 您遇到问题,对已可见的
    Swing GUI
    的所有更新必须在
    事件调度线程上完成,但在另一方面
    面板上。重新绘制()
    通知
    事件调度线程
    ,并且正确


  • 使用带有一列的
    JList
    (不可编辑)或
    JTable
    (可编辑)(可以删除
    JTableHeader
    ),而不是带有一堆
    jcheckbox
    JPanel
    ,并使用非自然滚动,注意模型中存储了
    布尔值,表示视图中的
    JCheckBox
      • 调用
        panel.removeAll()有一个逻辑问题而不是
        滚动窗格.removeAll()

      • JComponent
        被添加到
        JViewport
        而不是
        JScrollPane

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

      • 您遇到问题,对已可见的
        Swing GUI
        的所有更新必须在
        事件调度线程上完成,但在另一方面
        面板上。重新绘制()
        通知
        事件调度线程
        ,并且正确


      • 使用带有一列的
        JList
        (不可编辑)或
        JTable
        (可编辑)(可以删除
        JTableHeader
        ),而不是带有一堆
        jcheckbox
        JPanel
        ,并使用非自然滚动,注意模型中存储了
        布尔值,表示视图中的
        JCheckBox
      我在netbeans创建scrollPanel.removeAll()时调用它,然后使用该面板重新创建。我仍然有点不确定您对所有这些要点的意思。我在netbeans创建scrollPanel.removeAll()时调用它,然后使用该面板重新创建。我还是有点不确定你说的这些话是什么意思