【问题标题】:Add JCheckBox to JScrollPane将 JCheckBox 添加到 JScrollPane
【发布时间】:2014-01-08 00:01:43
【问题描述】:

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

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);

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

提前感谢您的帮助。

【问题讨论】:

标签: java swing jdbc jscrollpane jcheckbox


【解决方案1】:
  • 调用panel.removeAll(); 而不是scrollPane.removeAll(); 存在逻辑问题

  • JComponent 被添加到JViewport 而不是JScrollPane

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

  • 您对Concurency in Swing 有疑问,对已经可见的Swing GUI 的所有更新必须在Event Dispatch Thread 上完成,但另一方面panel.repaint() 通知Event Dispatch Thread 并且正确

    李>

  • 使用JList(non_editable)或JTable(可编辑)与一列(可能删除JTableHeader)而不是JPanel与一堆JCheckBoxes和un_natural滚动,注意存储模型中的Boolean 值,表示视图中的JCheckBox

【讨论】:

  • 我调用 scrollPanel.removeAll() 作为 netbeans 创建它,然后我使用面板重新创建。我仍然有点不确定你对所有这些观点的意思。
猜你喜欢
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2017-03-03
  • 1970-01-01
  • 2012-11-07
  • 2012-11-17
  • 2013-12-17
相关资源
最近更新 更多