请看下面的代码
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();
}
}
}
在这里,我想在选择项目时为所选项目应用颜色。我怎样才能做到这一点?
前任:
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
更新
我用自定义渲染器重新编码。现在它是突出显示选定的项目,但是一旦鼠标移动,颜色就会恢复到原始状态。换句话说,这里唯一发生的事情是更改突出显示颜色,而不是永久地将颜色应用于所选项目
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();
}
}
}