关闭

Swing开发带图片的List

标签: swingobjectliststring聊天java
804人阅读 评论(0) 收藏 举报
分类:

在很多软件开发中为了让用户有更好的界面需要在列表中加入图片,最典型的就是聊天软件中的好友列表,如在腾讯QQ中的好友列表:


不仅加入的常规的文本,还有图片头像,这也是用标准的JAVA所不能做出来的组件,要做出这样的组件,方法很简单,自定义列表,自己描绘列表单元格,同样也需要实现接口ListCellRenderer
来描绘单元格
 
首先先创建一个类实现ListCellRenderer接口,但为了更方便的使用我们自定义的列表,笔者把该类和继承JList的IconList类封装在一起
 
代码如下:
 
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class IconList extends JList 
{
  public IconList(DefaultListModel model)//使用列表模板创建列表
  {
   super(model);//调用父类构造方方
   setCellRenderer(new IconCellRenderer());//设置单元格设置
   setBackground(Color.white);//设置列表背景色
   setForeground(Color.blue);//设置列表前景色
  }

  class IconCellRenderer extends JLabel implements ListCellRenderer
  {   
    public Component getListCellRendererComponent(JList list,Object obj,int index, boolean isSelected, boolean cellHasFocus) 
    {   
      Object[] cell=(Object[])obj;
      setIcon((Icon)cell[0]);//设置图片
      setText((cell[1].toString()));//设置文本
      setToolTipText(cell[2].toString());//设置提示文本
      setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));//加入宽度为5的空白边框
      
   
       if(isSelected)//如果选中
       {
        setBackground(Color.cyan);//设置背景色   
        setForeground(Color.blue);   
      }   
      else//没有选中
      {   
        setBackground(Color.white);  //设置背景色  
        setForeground(Color.blue);   
       }   
      setEnabled(list.isEnabled());   
      setFont(new Font("sdf",Font.ROMAN_BASELINE,13));   
      setOpaque(true);   
      return this;   
   }       
  }
}
这就个自定义列表的全部代码。
 
下面我们写一个测试函数来看看自定义列表的效果如何
首先得准备几张头像图片
 
代码如下:
 
import java.awt.BorderLayout;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import com.jtattoo.plaf.aluminium.AluminiumLookAndFeel;
public class text 
{
   JFrame frame;
    IconList list;
    DefaultListModel listmodel;
 
 public text()
 {
  try
  {
   UIManager.setLookAndFeel("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel");
   SwingUtilities.updateComponentTreeUI(frame);
  }catch(Exception e){}
  frame=new JFrame();
  frame.setSize(120,300);  
  listmodel=new DefaultListModel();
  list=new IconList(listmodel);
  
  listmodel.addElement(new Object[]{new ImageIcon("1.png"),"好友1","提示信息"});//添加选项
  listmodel.addElement(new Object[]{new ImageIcon("2.png"),"好友2","提示信息"});//添加选项
  listmodel.addElement(new Object[]{new ImageIcon("3.png"),"好友3","提示信息"});//添加选项
  listmodel.addElement(new Object[]{new ImageIcon("4.png"),"好友4","提示信息"});//添加选项
  
  frame.add(list,BorderLayout.CENTER);
  frame.setVisible(true);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 
 public static void main(String[] args) 
 {
  new text();
 }
}
运行结果为:


 
如果读者有更好的技术,请在此提出,互相交流,谢谢!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13604次
    • 积分:242
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    文章存档
    最新评论