JComboBox中根据条件改变菜单中字体的颜色
2008-05-19 15:33
507 查看
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项是不会改变前景颜色的 可以根据具体的需求和操作进行扩展以满足自己的要求
列表,这个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项是不会改变前景颜色的 可以根据具体的需求和操作进行扩展以满足自己的要求
相关文章推荐
- dev grdicontrol 根据条件改变行颜色,字体颜色等
- dev grdicontrol 根据条件改变行颜色,字体颜色等
- ExtJS GridPanel根据条件改变字体颜色
- ExtJS GridPanel 根据条件改变字体颜色
- ExtJS GridPanel根据条件改变字体颜色
- ExtJS GridPanel 根据条件改变字体颜色
- DevExpress控件-GridControl根据条件改变单元格/行颜色(Dev GridControl 单元格着色)
- devexpress实现单元格根据条件显示不同的样式(颜色、字体、对齐方式,大小等)
- easyUI 根据一些条件改变DataGrid 行背景颜色
- Kendo Grid 行样式(根据条件改变行颜色)
- Cxgrid根据列条件改变行颜色
- GridView中根据条件改变颜色
- gridview根据条件来改变行的颜色以及改变单元格的颜色。
- 根据条件改变cxGrid行与列颜色
- javaseday38补充(下拉菜单改变字体颜色 级联菜单制作删除 删除附件)
- js根据条件改变jqgrid行颜色
- winform中改变DataGridView中符合条件的字体的颜色和列的颜色
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- 根据条件改变TreeView的颜色
- SqlServer中计算列详解和winform中改变DataGridView中符合条件的字体的颜色和列的颜色