personalizar fondo color cambiar java swing jcombobox java-7 setbackground

fondo - color jcombobox java



Cambiar el color de fondo editable JComboBox (2)

ver mi ejemplo de código

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<String> listSomeString = new Vector<String>(); 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(); } }); } }

Estoy programando un cuadro combinado editable en un Formulario JFrame, pero quiero cambiar el color de fondo.

Cómo funciona el programa: si hago clic en el botón "presionar", entonces el cuadro combinado de su fondo debe convertirse en negro.

Lo intenté:

1.

cbo.setBackground(Color.BLACK);

Pero no hizo nada

2

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

Haz esto:

Ejemplo de código:

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); }

Estoy trabajando con Java JDK7

Alguna sugerencia?


Funciona para mí cambiar el color de un elemento seleccionado en 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); } }


Si desea cambiar el color de los elementos en JCombobox a excepción de uno seleccionado, personalice ListCellRenderer.