2013-12-19 88 views
1

我試圖根據我的數據庫中的內容動態添加複選框到滾動窗格。目前我有將JCheckBox添加到JScrollPane

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

的可能重複的[動態創建JCheckBox的,並加入到一個JScrollPane](http://stackoverflow.com/questions/10234704/dynamically-create-jcheckbox-and-add-to-a-jscrollpane ) – meain

回答

4
  • 有一個合乎邏輯的問題調用panel.removeAll();代替scrollPane.removeAll();

  • JComponent被添加到JViewport不給JScrollPane

  • 然後調用(畢竟項目添加到JPanelpanel.revalidate()panel.repaint()作爲最後的代碼行中的空白

  • 你有一個問題與Concurency in Swing,已可見Swing GUI必須Event Dispatch Thread完成所有更新,但在其他的手panel.repaint()通知Event Dispatch Thread和正確


  • 使用JList(non_editable)或JTable(可是可編輯的)與一列(可能刪除JTableHeader)而不是JPanelJCheckBoxes一堆和不自然滾動,注意存儲Boolean值在模型中,代表JCheckBox在視圖
+0

我調用scrollPanel.removeAll()netbeans創建它,然後我重新使用面板。對於所有這些要點,我仍然有點不確定。 –