Please have a look at the following code
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class JCombo extends JFrame
{
JComboBox com1;
public JCombo()
{
com1 = new JComboBox();
com1.addItem("Select");
com1.addItem("One");
com1.addItem("two");
com1.addItem("Three");
com1.addItemListener(new Com1Action());
this.setLayout(new FlowLayout());
this.add(com1);
this.pack();
this.validate();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private class Com1Action implements ItemListener
{
public void itemStateChanged(ItemEvent ae)
{
if(ae.getStateChange() == ItemEvent.SELECTED)
{
com1.getSelectedItem();
}
}
}
public static void main(String[]args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new JCombo();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
In here, I want to apply a colour to the selected item, when an item is selected. How can I do that?
ex:
User selects "One" - Now "One" changes to blue
User selects "Two" - Now "Two" changes to blue. "One" is also blue as well, because we changed the colour at the first place
User selected "Three" - Now "Three" changes to blue. "One" and "Two" remains blue as well
UPDATE
I re coded this with a custom renderer. Now it is highlight the selected item, but as soon as the mouse moves, the colours comes back to the original state. In other words, the only thing happened here is changing the highlight color, not applying a colour to the selected item permanently
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class JCombo extends JFrame
{
JComboBox com1;
public JCombo()
{
com1 = new JComboBox();
com1.setLightWeightPopupEnabled(true);
com1.addItem("One");
com1.addItem("two");
com1.addItem("Three");
com1.setRenderer(new MyCellRenderer());
com1.addItemListener(new Com1Action());
this.setLayout(new FlowLayout());
this.add(com1);
this.pack();
this.validate();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private class Com1Action implements ItemListener
{
public void itemStateChanged(ItemEvent ae)
{
if(ae.getStateChange() == ItemEvent.SELECTED)
{
com1.getSelectedItem();
}
}
}
class MyCellRenderer extends JLabel implements ListCellRenderer<Object>
{
public MyCellRenderer()
{
setOpaque(true);
}
public Component getListCellRendererComponent(JList<?> list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
setText(value.toString());
Color background = Color.white;
Color foreground = Color.black;
// check if this cell represents the current DnD drop location
JList.DropLocation dropLocation = list.getDropLocation();
if (dropLocation != null
&& !dropLocation.isInsert()
&& dropLocation.getIndex() == index) {
// check if this cell is selected
} else if (isSelected) {
background = Color.RED;
foreground = Color.WHITE;
// unselected, and not the DnD drop location
} else {
};
setBackground(background);
setForeground(foreground);
return this;
}
}
public static void main(String[]args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new JCombo();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}