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

本文介绍如何使用Java Swing的JComboBox组件,并通过自定义渲染器来改变下拉列表项的颜色。通过实现ListCellRenderer接口,可以在特定操作后为列表项设置不同的颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   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后的情况

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值