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 < Integer >  iscom  =   new  Vector < Integer > ();
 
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项是不会改变前景颜色的 可以根据具体的需求和操作进行扩展以满足自己的要求

你可能感兴趣的:(java,String,object,null,扩展)