2011-08-18 115 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); 


}