我正在尝试根据我的数据库中的内容动态添加复选框到滚动窗格。目前我有
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);
我可以看到滚动窗格的轮廓,但没有复选框。所有复选框都存储在一个向量中,然后退回并一次添加到面板中。任何想法为什么它没有显示任何东西?我知道复选框在矢量中,因为我打印出来并在那里看到它们。
提前感谢您的帮助。
答案 0 :(得分:4)
调用panel.removeAll();
代替scrollPane.removeAll();
JComponent
已添加到JViewport
,但未添加到JScrollPane
然后调用(将所有项目添加到JPanel
)panel.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