JAVA小项目(2)——制作控件

今天对着源码写了一个控件的小项目,第一次涉及到这些包,大部分略感陌生,有一点引用图片的心得:

1、new ImageIcon("C:/workspace se/20160118_Icon/images/1.gif") 

一般在这里出现空指针的问题,大多因为路径的错误。我用绝对路径成功显示了图片。

在网上看到另一种用相对路径的方法:getClass().getClassLoader().getResource(“1.gif的相对路劲”),

但是这么写会出现空指针问题,该问题暂时遗留,未解决。


运行效果图:



代码如下:

package Icon;

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;

//带图标下拉框的单元绘制器,从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;
	}
}


package Icon;

import java.awt.BorderLayout;
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 IconComboBoxDemo extends JFrame{
	JLabel iconLabel = null;		//用来相应列表框选择的变化;JLabel() 创建无图像并且其标题为空字符串的 JLabel。
	JComboBox iconComBox = null;		//定制的选择下拉框
	//定义Object二维数组,用于初始化下拉框,参数依次为图标,显示文本,提示文本
	public IconComboBoxDemo(){
		Object[][] obj = {   //JFrame.class.getClass().getClassLoader().getResource
				{new ImageIcon("C:/workspace se/20160118_Icon/images/1.gif"), "旅游", "提供旅游的最新信息"},
				{new ImageIcon("C:/workspace se/20160118_Icon/images/2.gif"), "音乐", "提供最新的音乐资讯,古典的、流行的..."},
				{new ImageIcon("C:/workspace se/20160118_Icon/images/3.gif"), "聊天", "与朋友聊天"},
				{new ImageIcon("C:/workspace se/20160118_Icon/images/4.gif"), "影视", "影视娱乐"},
				{new ImageIcon("C:/workspace se/20160118_Icon/images/5.gif"), "家居", "家居世界"},
		};
		//初始化下拉框
		JComboBox 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();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值