2011-08-18 162 views

回答

4

這不是真的可能(意味着它不會像您期望的那樣) - 您實際需要的是列表LayoutManager,這些列表將列出垂直或水平列表中的組件。因此,您不必使用JList,而是使用JPanel以及類似列表的佈局管理器。

嘗試這些:

  • BoxLayout將會把所有的JPanels在單個列/行
  • GridLayout將會把所有的JPanels在一個單一的列/行,讓他們所有的大小相同
1

試試這個。它適用於我。

class PanelRenderer implements ListCellRenderer { 

    @Override 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     JPanel renderer = (JPanel) value; 
     renderer.setBackground(isSelected ? Color.red : list.getBackground()); 
     return renderer; 
    } 
} 

public void ShowItemList(List<JPanel> paneList, JPanel container) { 


     DefaultListModel model = new DefaultListModel(); 

     for (JPanel pane:paneList) { 

       model.addElement(pane); 

     } 
     final JList list = new JList(model); 
     list.setFixedCellHeight(40); 
     list.setSelectedIndex(-1); 

     list.setCellRenderer(new JPanelToJList.PanelRenderer()); 
     JScrollPane scroll1 = new JScrollPane(list); 
     final JScrollBar scrollBar = scroll1.getVerticalScrollBar(); 
     scrollBar.addAdjustmentListener(new AdjustmentListener() { 
      @Override 
      public void adjustmentValueChanged(AdjustmentEvent e) { 
       System.out.println("JScrollBar's current value = " + scrollBar.getValue()); 
      } 
     }); 


     container.add(scroll1); 


}