JAVA做出带图片的组合框

    为了给用户更好的界面,我们就要做出更炫酷的组件,如腾讯QQ2010用采用.net技术开发的界面确实非常美观

   
    这里的组合框不仅包括常规的文本,还包括头像图片,这是用标准的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使我们的组件更加漂亮

by 雪洁 2011-05-14 16:26:56 4470 views
我来说几句

相关文章