import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class ImageMain extends JFrame{
private JLabel label;
private JComboBox comboBox;
//二维数组的建立,用于保存图片,及相关信息
/**
* 1,Object[][]obj=new {{},{},{}};二维数组,及外面最大的花括弧是第一维,其长度为obj.length
* 里面的小的花括号为第二维,里面的长度是obj【i】.length
* 2,ImageIcon(url,text1,text2)是图片类
* url是图片的路径
* text1是图片名称
* text2是图片的说明
*/
Object[][]obj={
{new ImageIcon("J:\\workSpace\\jase100\\src\\ch01\\setion1\\1.gif"),"旅游","提供旅游的最新信息"},
{new ImageIcon("J:\\workSpace\\jase100\\src\\ch01\\setion1\\2.gif"),"音乐","提供最新的音乐资讯,古典的、流行的..."},
{new ImageIcon("J:\\workSpace\\jase100\\src\\ch01\\setion1\\3.gif"),"聊天","与朋友聊天"},
{new ImageIcon("J:\\workSpace\\jase100\\src\\ch01\\setion1\\4.gif"),"影视","影视娱乐"},
{new ImageIcon("J:\\workSpace\\jase100\\src\\ch01\\setion1\\5.gif"),"家居","家居世界"},
};
//在构造方法中初始化
public ImageMain() throws HeadlessException {
comboBox=new JComboBox();
//设置JComboBox可见页面最大显示3个选项
comboBox.setMaximumRowCount(3);
/**
* 重点
* 1,这里是设置渲染器
* 2,设置的类是自己新建的类,此类继承了JLabel,实现了ListCellRender
* 3,自己可以按自己的要求来设计新建类,以显示出自己喜欢的界面
*/
comboBox.setRenderer(new ImageaRenderer());
//为JComboBox添加选项
for(int i=0;i<obj.length;i++){
comboBox.addItem(obj[i]);
}
label=new JLabel();
/**
* 添加监听(这里是行为)
* 通过获得JComboBox选项中的内容在面板中显示
*
*/
comboBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
Object[]obj1=(Object[])comboBox.getSelectedItem();
// for(Object o:obj1){
// System.out.println("*******************************************"+o);
// }
label.setIcon((Icon)obj1[0]);
label.setText((String)obj1[2]);
}
});
//最后是设置JComboBox和JLabel的相关参数。
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(BorderLayout.NORTH, comboBox);
this.getContentPane().add(BorderLayout.CENTER, label);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setSize(350, 260);
this.setVisible(true);
}
public static void main(String[] args) {
ImageMain image=new ImageMain();
}
}
***************************ImageRenderer
import java.awt.Color;
import java.awt.Component;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.border.LineBorder;
/**
* 此类是继承了JLable实现了ListCellRender接口,所以本质上兼有JLable和ListCellRender的双重作用
* 调用此类,相当于使用了JLabel类
*
*/
public class ImageaRenderer extends JLabel implements ListCellRenderer {
/**
* JList 是一个组间的列表相关内容
* Object,返回使用本对象的对象
* index - 单元格索引。
isSelected - 如果选择了指定的单元格,则为 true。
cellHasFocus - 如果指定的单元格拥有焦点,则为 true。
*/
public Component getListCellRendererComponent(JList arg0, Object arg1,
int arg2, boolean arg3, boolean arg4) {
Object []obj=(Object[])arg1;
//这里是JLabel里的JLabel设置
setIcon((Icon)obj[0]);
setText((String)obj[1]);
setToolTipText(obj[2].toString());
setBorder(new LineBorder(Color.RED));
if(arg3){
setForeground(Color.GREEN);
}else{
setForeground(arg0.getForeground());
}
return this;
}
}