2011-07-27 21 views
2

我可以用改變組合框的背景色:變化的JComboBox色無渲染

UIManager.put("ComboBox.background", Color.RED); 

和它的作品。

而是要改變[選擇]裝置技術領域,在看看Nimbus Defaults的屬性被稱爲組合框: 「ComboBox.listRenderer」[選擇]裝置技術領域,所以我試着用:

UIManager.put("ComboBox:\"ComboBox.listRenderer\"[Selected].background", Color.RED); 

但它不起作用。

我想用渲染器(我已經嘗試過,並將很多問題轉化爲長代碼,我甚至沒有自己寫過,並且如果我以這種方式渲染組合框到JFileChoosers中是一個額外的問題) 。那麼,有沒有解決方案使用UIMAnager.put()來解決這個問題?

回答

1

設置不同Color,而不使用Nimbus defaluts

1 /單獨的JComboBox

((JTextField) myJComboBox.getEditor().getEditorComponent()) 
#setBackground(Color.xxxx); 

2/JFileChooser的

  • 提取所有JComponentsJFileChooser(化合物JComponents)作爲sugested here ,與所述的相同和JScrooPane

  • 通過提取

    safiest方式使用NimbusDefalut發現defalut建議從JFileChooser所有JComponents在以前的帖子有關here

3 /爲

  • JTextField和建議在我加上號碼

  • JComboBox's DropDown List從defaluts爲JList,熒光筆供選擇從JTable

編輯:

代碼

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.plaf.basic.BasicComboPopup; 

public class DisabledEditableCombo extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private String comboList[] = (new String[]{"-", "London", "New York", "Sydney", "Tokyo"}); 
    private JComboBox cmb = new JComboBox(comboList); 
    private JComboBox cmb1 = new JComboBox(comboList); 
    private JComboBox cmb2 = new JComboBox(comboList); 
    private JComboBox cmb3 = new JComboBox(comboList); 
    private JList list; 
    private JCheckBox checkBox = new JCheckBox("Combo enabled", false); 

    public DisabledEditableCombo() { 
     JLabel lbl = new JLabel("Editable JComboBox"); 
     cmb.setEditable(true); 
     ((JTextField) cmb.getEditor().getEditorComponent()).setDisabledTextColor(Color.red); 
     ((JTextField) cmb.getEditor().getEditorComponent()).setBackground(Color.green); 
     cmb.setSelectedItem("Just Editable"); 
     JLabel lbl1 = new JLabel("Non-Editable JComboBoxes"); 
     //UIManager.put("ComboBox.disabledForeground", Color.red.darker().darker()); 
     cmb1.setSelectedItem("Sydney"); 
     cmb1.setRenderer(new DefaultListCellRenderer() {// ListCellRenderer 

      private static final long serialVersionUID = 1L; 

      @Override 
      public void paint(Graphics g) { 
       setBackground(cmb1.getBackground()); 
       setForeground(Color.red); 
       super.paint(g); 
      } 
     }); 
     cmb2.getEditor().getEditorComponent().setForeground(Color.blue); 
     ((JTextField) cmb2.getEditor().getEditorComponent()).setDisabledTextColor(Color.red); 
     cmb2.setSelectedItem("London"); 
     cmb3.setSelectedItem("Sydney"); 
     checkBox.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       boolean selected = checkBox.isSelected(); 
       cmb.setEnabled(selected); 
       cmb1.setEnabled(selected); 
       cmb2.setEnabled(selected); 
       cmb2.setEditable(!cmb2.isEnabled()); 
       cmb2.setForeground(selected ? Color.blue : Color.red); 
       if (cmb2.getEditor() != null) { 
        ((JTextField) cmb2.getEditor().getEditorComponent()).setDisabledTextColor(Color.red); 
       } 
       cmb3.setEnabled(selected); 
       Object child = cmb3.getAccessibleContext().getAccessibleChild(0); 
       BasicComboPopup popup = (BasicComboPopup) child; 
       list = popup.getList(); 
       if (list != null) { 
        if (selected) { 
         list.setForeground(Color.blue); 
        } else { 
         list.setForeground(Color.red); 
        } 
       } 
      } 
     }); 
     cmb.setEnabled(false); 
     cmb1.setEnabled(false); 
     cmb2.setEnabled(false); 
     cmb3.setEnabled(false); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     setPreferredSize(new Dimension(300, 300)); 
     setLocation(150, 100); 
     setLayout(new GridLayout(7, 0, 10, 10)); 
     add(lbl); 
     add(cmb); 
     add(lbl1); 
     add(cmb1); 
     add(cmb2); 
     add(checkBox); 
     add(cmb3); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       DisabledEditableCombo disabledEditableCombo = new DisabledEditableCombo(); 
      } 
     }); 
    } 
} 
+0

到目前爲止,我與解決方案#1的嘗試,我得到一個錯誤。將'#'改爲'。'它走了,但沒有任何變化。無論如何,尋找改變背景,而不是選擇的背景 –

+0

@羅曼Rdgz請問問題出在哪裏, – mKorbel

+0

問題是第一個不起作用,第二個告訴我使用代碼從我以前的問題,應該只修復JComboBox在FileChooser但不是其他人,第三個我只是不明白你要求我做什麼。最後,我也不理解在編輯之後添加的代碼:它旨在替換FileChooser外部的JComboBox?它被測試了嗎? –