网上面介绍JCombox的事件的帖子很多,所以我想写一种特殊的大家不熟悉的“另类”消息,他主要用于想给列表框的列表项加上Tip提示信息,或者做一些模糊查询时可以使用,效果类似下图:
第一种:加入提示信息
第二种:模糊查询效果图:
话不多说,先简要介绍一下这个消息:
我们一般使用的的消息都是类似于JCombox.addXXXListener,但是不知道大家发现没有,对于JCombox的消息函数,他没有对于下拉列表中每一项的消息函数,所以这里很不一样,要用到一个渲染器Render的东西,听起来和消息貌似没有关系,下面把步骤告诉大家:
首先写这么一个类:
class MyComboBoxRenderer extends JLabel implements ListCellRenderer{
JComboBox com;
MyComboBoxRenderer(JComboBox combox){
com = combox;
setOpaque(true);
}
@Override
/*参数信息:list,JCombox组件的项
* value:当前选择的项的值(相当于输入栏显示的值,不是鼠标移动到的值)
* index:鼠标指向的项的索引
* isSelected:鼠标指向的项是否被选中
* cellHasFocus:是否有焦点植入
*/
* */
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// TODO Auto-generated method stub
String item = (value == null) ? "" : value.toString();//得到刚才输入的内容
setText(item);//输出刚才得到的内容
if (-1 < index){//得到用户选择了第几个项,-1是没有选中这个项
switch(index)
{
case 0: //第0项
list.setToolTipText("第一项提示");//第0项的提示信息
break;
case 1:
list.setToolTipText("第二项提示");
break;
//。。。。。。。
}
}
Color background;
Color foreground;
//因为有时候
if (isSelected) { //如果选择了这个项
background = Color.BLUE;//背景色设置为蓝色(填充颜色)
foreground = Color.WHITE;//前景色设置为白色(字体颜色)
// unselected, and not the DnD drop location
} else {
background = Color.WHITE;//背景色设置为白色
foreground = Color.BLACK;//前景色设置为黑色
}
setBackground(background);
setForeground(foreground);
return this; //不要漏掉这句哦!!
}
}
注意上面的switch里面就是你要的提示信息了。
第二步:
定义一个JCombox,并增加渲染器:
JComboBox mCom = new JComboBox();
mCom.setRenderer(new MyComboBoxRenderer(mCom));
第三步:
这个时候显示的下拉列表框可能不能自动下拉,并且大小很小,再加上下面两句话:
nameComboBox.setPreferredSize(new Dimension(100,20));
nameComboBox.showPopup();
这样是不是就是你要的效果啦,欢迎交流~!