import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//顏色選擇下拉框演示
public class IconComboBoxDemo extends JFrame{
JLabel iconLabel=null; //用來響應列表框選擇的變化
JComboBox iconComboBox=null; //定制的選擇下拉框
public IconComboBoxDemo(){
//定義Object二維數組,用於初始化下拉框,參數依次為圖標,顯示文本,提示文本
Object[][] obj={
{new ImageIcon("1.gif"),"旅游","提供旅游的最新信息"},
{new ImageIcon("2.gif"),"音樂","提供最新的音樂資訊,古典的、流行的..."},
{new ImageIcon("3.gif"),"聊天","與朋友聊天"},
{new ImageIcon("4.gif"),"影視","影視娛樂"},
{new ImageIcon("5.gif"),"家居","家居世界"},
};
//初始化下拉框
iconComboBox = new JComboBox();
iconComboBox.setMaximumRowCount(3); //設置最大可視行數
iconComboBox.setRenderer(new IconRenderer()); //設置單元繪制器
for (int i=0;i<obj.length;i++){ //增加數組中的所有元素到下拉框中
iconComboBox.addItem(obj[i]);
}
//初始化iconLabel信息
iconLabel = new JLabel();
//下拉框事件處理,用匿名類實現
iconComboBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){ //處理事件
Object[] obj = (Object[])iconComboBox.getSelectedItem(); //得到選擇的內容,此處為一維數組
iconLabel.setIcon((Icon)obj[0]); //設置iconLabel的圖標
iconLabel.setText(obj[1].toString()); //設置iconLabel的文本
}
});
//增加組件到主窗體上
this.getContentPane().setLayout(new BorderLayout()); //設置布局管理器
this.getContentPane().add(iconComboBox,BorderLayout.NORTH); //在上方增加下拉框
this.getContentPane().add(iconLabel,BorderLayout.CENTER); //在中間增加iconLabel,用於響應選擇的變化
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //關閉窗口時退出程序
this.setSize(350,260); //設置窗口尺寸
this.setVisible(true); //顯示窗口
}
public static void main(String[] args){
new IconComboBoxDemo();
}
}
import java.awt.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
//帶圖標下拉框的單元繪制器,從JLabel類擴展,實現ListCellRenderer接口
public class IconRenderer extends JLabel implements ListCellRenderer{
public Component getListCellRendererComponent(JList list, Object obj, int row, boolean sel, boolean hasFocus) {
Object[] cell = (Object[])obj; //得到行的參數
setIcon((Icon)cell[0]); //設置圖標
setText(cell[1].toString()); //設置文本
setToolTipText(cell[2].toString()); //設置提示文本
setBorder(new LineBorder(Color.WHITE)); //設置邊界
if (sel){
setForeground(Color.MAGENTA); //如果選中了,設置文本顏色為品紅色
}
else{
setForeground(list.getForeground()); //如果未選中,設置文本顏色為默認色
}
return this;
}
}