在使用JAVA开发软件时,大家可能和我的感觉一样,感觉JAVA做出来的界面不够炫酷,这也是 JAVA桌面的不足之处,虽然能够满足几乎所有的软件开发,然而在某些情况下,为了给用户更好的界面,我们就要做出更炫酷的组件,如腾讯QQ2010开发的界面确实非常美观,
这里的组合框不仅包括常规的文本,还包括头像图片,这是用标准的JAVA所不能做出来的组件,常规的方法做不出来,我们可以自定义描绘单元格,下面将通过笔者的经验详细讲解
首先,想做出带图片的组合框就必须自己描绘单元格,可以通过实现ListCellRenderer接口来自定义单元格,还要继承JLabel来设置文本和图片(基于JLabel的构造方法)
下面创建一个自定义单元格类IconRenderer
代码如下:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
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.gray));//绘制边框
if(sel)//如果选中
{
setForeground(Color.blue);//设前景色为蓝色
}
else//没选中
{
setForeground(list.getForeground());//设前景色为默认
}
return this;
}
}
这是一个描绘单元格的类,现在写测试主函数看看如何使用该类
首先得准备几张16x16的图片,用来测试
代码如下:
import java.awt.*;
import javax.swing.*;
public class text
{
JFrame frame;
JComboBox cb=new JComboBox();
public text()
{
frame=new JFrame("窗口");
frame.setSize(300,300);
JComboBox icb=new JComboBox();//定义标准组合框
icb.setMaximumRowCount(5);//设置最大显示行
icb.setRenderer(new IconRenderer());//调用单元格设置(这里使用了我们刚才创建的类)
icb.setBackground(Color.white);//设置背景色
icb.addItem(new Object[]{new ImageIcon("1.png"),"组合框1","提示信息"});//添加选项
icb.addItem(new Object[]{new ImageIcon("2.png"),"组合框2","提示信息"});//添加选项
icb.addItem(new Object[]{new ImageIcon("3.png"),"组合框3","提示信息"});//添加选项
icb.addItem(new Object[]{new ImageIcon("4.png"),"组合框4","提示信息"});//添加选项
frame.add(icb,BorderLayout.NORTH);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
new text();
}
}
代码结束
运行结果如下:
怎么样,是不是比标准的JAVA组合框炫酷多了?
不仅如此,我还可以使用类UIManager来改变我们的LookAndFeel使我们的组件更加漂亮
下面是我的一个演示结果:
如果读者有更好的技术,请提出来,大家互相交流,谢谢!