更改背景颜色可编辑JComboBox

我正在编写一个JFrame表单中的可编辑combobox,但我想改变背景颜色。

程序如何工作:如果我点击“按”按钮,那么combobox的背景需要变成黑色。

我试过了:

1。

cbo.setBackground(Color.BLACK); 

但它没有做任何事情

2

 cbo.getEditor().getEditorComponent().setBackground(Color.BLACK); ((JTextField) cbo.getEditor().getEditorComponent()).setOpaque(true); 

做这个:

图片

代码示例:

 public class NewJFrame extends javax.swing.JFrame { private JComboBox cboCategorie; public NewJFrame() { initComponents(); cboCategorie = new JComboBox(); cboCategorie.setBounds(10, 10, 250, 26); cboCategorie.setVisible(true); cboCategorie.setEditable(true); this.add(cboCategorie); } private void pressActionPerformed(java.awt.event.ActionEvent evt) { cboCategorie.getEditor().getEditorComponent().setBackground(Color.BLACK); ((JTextField) cboCategorie.getEditor().getEditorComponent()).setOpaque(true); } 

我正在使用Java JDK7

任何sugestions?

看我的代码示例

在此处输入图像描述

 import java.awt.*; import java.util.Vector; import javax.swing.*; import javax.swing.UIManager; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.metal.MetalComboBoxButton; public class MyComboBox { private Vector listSomeString = new Vector(); private JComboBox someComboBox = new JComboBox(listSomeString); private JComboBox editableComboBox = new JComboBox(listSomeString); private JComboBox non_EditableComboBox = new JComboBox(listSomeString); private JFrame frame; public MyComboBox() { listSomeString.add("-"); listSomeString.add("Snowboarding"); listSomeString.add("Rowing"); listSomeString.add("Knitting"); listSomeString.add("Speed reading"); // someComboBox.setPrototypeDisplayValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); someComboBox.setFont(new Font("Serif", Font.BOLD, 16)); someComboBox.setEditable(true); someComboBox.getEditor().getEditorComponent().setBackground(Color.YELLOW); ((JTextField) someComboBox.getEditor().getEditorComponent()).setBackground(Color.YELLOW); // editableComboBox.setPrototypeDisplayValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); editableComboBox.setFont(new Font("Serif", Font.BOLD, 16)); editableComboBox.setEditable(true); JTextField text = ((JTextField) editableComboBox.getEditor().getEditorComponent()); text.setBackground(Color.YELLOW); JComboBox coloredArrowsCombo = editableComboBox; Component[] comp = coloredArrowsCombo.getComponents(); for (int i = 0; i < comp.length; i++) {// hack valid only for Metal L&F if (comp[i] instanceof MetalComboBoxButton) { MetalComboBoxButton coloredArrowsButton = (MetalComboBoxButton) comp[i]; coloredArrowsButton.setBackground(null); break; } } // non_EditableComboBox.setPrototypeDisplayValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); non_EditableComboBox.setFont(new Font("Serif", Font.BOLD, 16)); // frame = new JFrame(); frame.setLayout(new GridLayout(0, 1, 10, 10)); frame.add(someComboBox); frame.add(editableComboBox); frame.add(non_EditableComboBox); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocation(100, 100); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { UIManager.put("ComboBox.background", new ColorUIResource(Color.yellow)); UIManager.put("JTextField.background", new ColorUIResource(Color.yellow)); UIManager.put("ComboBox.selectionBackground", new ColorUIResource(Color.magenta)); UIManager.put("ComboBox.selectionForeground", new ColorUIResource(Color.blue)); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { MyComboBox aCTF = new MyComboBox(); } }); } } 

我可以在JComboBox中更改所选项目的颜色。

  JComboBox cmb = new JComboBox(); cmb.setEditable(true); cmb.setEditor(new WComboBoxEditor(getContentPane().getBackground())); // To change the arrow button's background cmb.setUI(new BasicComboBoxUI(){ protected JButton createArrowButton() { BasicArrowButton arrowButton = new BasicArrowButton(BasicArrowButton.SOUTH, null, null, Color.GRAY, null); return arrowButton; } }); cmb.setModel(new DefaultComboBoxModel(new String[] { "a", "b", "c" })); 

 import java.awt.Color; import java.awt.Component; import java.awt.event.ActionListener; import javax.swing.ComboBoxEditor; import javax.swing.JTextField; public class WComboBoxEditor implements ComboBoxEditor { JTextField tf; public WComboBoxEditor(Color background) { tf = new JTextField(); tf.setBackground(background); tf.setBorder(null); } public Component getEditorComponent() { return tf; } public void setItem(Object anObject) { if (anObject != null) { tf.setText(anObject.toString()); } } public Object getItem() { return tf.getText(); } public void selectAll() { tf.selectAll(); } public void addActionListener(ActionListener l) { tf.addActionListener(l); } public void removeActionListener(ActionListener l) { tf.removeActionListener(l); } } 

如果您想更改JCombobox中除选定项目之外的项目颜色,请自定义ListCellRenderer。