JComboBox中根据条件改变菜单中字体的颜色

   javax.swing.JComboBox下拉列表组件中的下拉列表是一个javax.swing.JList
列表,这个JList可以用在好多的地方就不多说了

如图如果想在某中特定的操作后 把某个列表中的内容颜色变为指定的颜色

 

 在一般情况下在使用JComboBox.addItem(Object value);的时候默认的是一个Object对象即字符传对象 在java中是不允许在没有容器接收的情况下是不允许使用awt.color或是Font进行字体和颜色上的变化的

要进行此操作可以将下拉列表中的项渲染为JLabel进行颜色和字体的变化

JComboBox中进行item的渲染中使用setRender()方法将渲染器注入到组件中和JTabel,Jtree中的使用基本是类似的

以下代码作为简单的示例

 

package test; 

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Vector; 

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer; 

public class Testdemo01 extends JFrame implements ItemListener{
 
 private JComboBox jcb;
 private static Vector iscom = new Vector();
 public Testdemo01()
 {
  this.setBounds(100, 100, 300, 100);
  jcb = new JComboBox();
  jcb.setRenderer(new jcbrender());
  jcb.addItem("11111111");
  jcb.addItem("222222");
  jcb.addItem("333333");
  jcb.setBounds(20, 20, 170, 30);
  jcb.addItemListener(this);
  Container c = getContentPane();
  c.setLayout(null);
  c.add(jcb);
  
 } 

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO 自动生成方法存根
         new Testdemo01().setVisible(true);
 }
 class jcbrender extends JLabel implements ListCellRenderer{ 

  public jcbrender()
  {
   this.setOpaque(true);
  }
  public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
   this.setText(value.toString()); 
        if(Testdemo01.iscom.indexOf(index)!=-1)
    {
     this.setForeground(Color.cyan);
    }else
    {
     this.setForeground(Color.black);
    }
   return this;
  }
  
 }
 public void itemStateChanged(ItemEvent e) {
      if(Testdemo01.iscom.indexOf(jcb.getSelectedIndex())==-1)
   {
    Testdemo01.iscom.add(jcb.getSelectedIndex());
   }
    } 

} 

 

 

运行后效果图

没有选择任何项之前

在选择222222后的情况

 JComboBox中根据条件改变菜单中字体的颜色_第1张图片

使用itemlistener的时候第一次选择1是按没有改变处理的所以如果选择1的话,1项是不会改变前景颜色的 可以根据具体的需求和操作进行扩展以满足自己的要求

你可能感兴趣的:(J2SE,jcombobox选项颜色更改,jcombobox选项颜色设置)