📄 iconcombox.java
字号:
//IconCombox.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class IconCombox extends JComboBox
{
//构造方法
public IconCombox(ImageIcon[] img, String[] strText)
{
//获取两个数组的大小的最小值,防止二者不一致,导致越界
int nItemCount=Math.min(img.length,strText.length);
ItemData[] objList=new ItemData[nItemCount];
for( int i=0; i< nItemCount; i++ ){
objList[i]=new ItemData(img[i],strText[i]);
}
//设置数据模型
this.setModel(new DefaultComboBoxModel(objList));
//设置定制单元绘制器
this.setRenderer(new IconComboRenderer());
}
/*
* 封装列表单元项包括图标和显示字符串
*/
class ItemData
{
private ImageIcon img;
private String strText;
//构造函数,直接继承父类
public ItemData(ImageIcon icon, String text)
{
img=icon;
strText=text;
}
//获取显示名
public String getText( )
{
return strText;
}
//获取图标对象
public Icon getIcon()
{
return img;
}
//类字符串化
public String toString()
{
return strText;
}
}
/**
* <pre>
* 用于绘制ComboBox的单元项,该绘制器对应的Model的每一项是一个对象数组,包括String和Icon.
* </pre>
*/
class IconComboRenderer extends JLabel implements ListCellRenderer
{
//获得和失去焦点时绘制器使用的border.
private Border lineBorder = BorderFactory.createLineBorder(Color.red, 4);
private Border emptyBorder = BorderFactory.createEmptyBorder(2,2,2,2);
//构造函数,设置为透明.
public IconComboRenderer()
{
setOpaque(true);
}
//实现该方法,控制单元的绘制
public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean cellHasFocus)
{
//绘制列表单元项的文本
setText(((ItemData)value).getText());
//绘制列表单元项的图标
this.setIcon(((ItemData)value).getIcon());
//根据选择状态的不同,对前、背景进行选择设置
if(isSelected)
{
setForeground(list.getSelectionForeground());
setBackground(list.getSelectionBackground());
}
else
{
setForeground(list.getForeground());
setBackground(list.getBackground());
}
//根据焦点状态的不同,对边框进行设置
if(cellHasFocus) setBorder(lineBorder);
else setBorder(emptyBorder);
return this;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -