2011-07-28 71 views
0

我在JList上使用這種方法在JFileChooser上定義了一個JComboBoxes。福阿德建議here自定義JFileChooser:FileFilters丟失

public void customizeJFileChooser(Container c) 
    { 
     Component[] cmps = c.getComponents(); 
     for (Component cmp : cmps) 
     { 
      if (cmp instanceof JList) 
      { 
       ((JList)cmp).setSelectionBackground(new Color(164,164,164)); 
      } 
      if (cmp instanceof JComboBox) 
      { 
       ((JComboBox)cmp).setRenderer(new DefaultListCellRenderer() { 
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
         Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
         if (isSelected) 
         comp.setBackground(new Color(164,164,164)); 
         return comp; 
         } 
         }); 
      } 
      if (cmp instanceof Container) 
      { 
       customizeJFileChooser((Container) cmp); 
      } 
     } 
    } 

的偉大工程的顏色,但......現在我已經用的FileFilter名稱的問題,因爲你可以在上面看到:

How it looks, and how I should look (and looked before changing the colors)

如果我不叫customizeJFileChooser它的名稱是正確的,所以它必須是該方法的問題。任何幫助?

+0

'Object.toString()' – mKorbel

回答

2

最有可能的是ListCellRenderer不僅僅是一個DefaultListCellRenderer,而是一個派生類。 因此,解決方案是獲取原件並將其包裝,而不是替換它。

 if (cmp instanceof JComboBox) 
     { 
      ((JComboBox)cmp).setRenderer(new DefaultListCellRenderer() { 
       private ListCellRenderer superLCR = ((JComboBox)cmp).getRenderer(); 
       public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
        Component comp = superLCR.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
        if (isSelected) 
         comp.setBackground(new Color(164,164,164)); 
        return comp; 
       } 
      }); 
     } 
+0

工作完美,謝謝:) –

相關問題