Swing开发带图片的List

原创 2011年01月12日 16:17:00

在很多软件开发中为了让用户有更好的界面需要在列表中加入图片,最典型的就是聊天软件中的好友列表,如在腾讯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();
 }
}
运行结果为:


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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java GUI开发- Swing AWT-设置背景图片

javaSE图形编程,如何设置背景图片呢?提供一段可以使用的代码!

freemaker导出word,带图片,list标签循环

用freemaker导出word,带图片,这里有一系列的步骤,有帮助的话, 请点个赞!

Android实现带图片的List列表

在做第一个Android应用时,不想使用Android默认的List界面,实在是太丑了。参考了网上前辈们的代码,下面是我最终实现的效果。 废话不多讲,上代码: 1、在Android...

list控件与图片显示

  • 2016-07-29 17:34
  • 14.37MB
  • 下载

Swing控件(JPanel,Container等)设置背景图片

Swing控件有直接设置背景颜色的方法,但没有直接设置背景图片的方法。这里不解的是为什么Swing默认不提供这个方法呢?既然它不提供我们就自己写一个吧,也不难,你要你知道Swing容器的图片都是用pr...
  • yy6060
  • yy6060
  • 2011-07-08 09:44
  • 1107

纯swing画出来的按钮。。。不使用图片

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.G...

[JAVA]Swing、事件监听、文件的初级综合。简易图片浏览器,逸雨清风XIUXIU。

JAVA的SWING、事件处理和文件打开,与VS各有千秋。 图片浏览应用,打开图片,按钮和键盘控制当前文件夹里上下一张图片,将所有图片缩放成适合屏幕显示的尺寸。 //发现一个问题是好像有内存溢...

Swing之JTree篇:在树节点中增加图片

如果想改变节点显示效果,可以通过设置setCellRenderer方法来实现。 例子:这个例子是同继承DefaultTreeCellRenderer类,重写getTreeCellRendere...

swing生成图片之动画播放

动画播放,包括播放速度、
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)