JList:显示对象列表并且允许用户选择一个或多个项的组件。

JList的构造方法:

1.根据数组创建列表:

JList(Object[] listData)
构造一个 JList,使其显示指定数组中的元素。

 String[] str = { "列表1", "列表2", "列表3", "列表4" };
JList<String> s = new JList<>(str);

一个简单地列表就显示出来了。

2.根据指定的非 null 模型构造一个显示元素的 JList。

JList(ListModel dataModel)

DefaultListModel<String> model=new DefaultListModel<>();
model.addElement("列表1");
model.addElement("列表2");
model.addElement("列表3");
model.addElement("列表4");
JList<String> s = new JList<>(model);

如图:

一个图片的JList

 ImageIcon u = new ImageIcon(this.getClass().getResource("卡通.jpg"));
u.setImage( u.getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT));
DefaultListModel<ImageIcon> model=new DefaultListModel<>();
model.addElement(u);
model.addElement(u);
model.addElement(u);
model.addElement(u);
JList<ImageIcon> list = new JList<>(model);

怎么实现一个又有图片又有文字的JList呢?

首先认识一下,JList的几个重要部分:

1.ListModel列表模型,用于获取列表中每个单元格的值以及列表的长度,

我们可以通过继承AbstractListModel类,来写自己的JList列表;AbstractListModel类继承了实现了ListModel接口,并且实现了序列化,

2.ListCellRenderer :单元渲染器。

要想使列表添加图片,那么我们就需要去自己实现这个ListCellRenderer 这个接口;

在默认的单元渲染器中,返回的是一个JLable,也就是把一个JLable放入JList中的列表中,作为它的每一个项目;

从JList默认的单元渲染器中我们可以看出JAVA自带的JList不能够同时实现文字以及图片。所以如果要实现一个既有文字又有图片的JList的话,那我们就需要去自己实现单元渲染器;

自定义JLIst列表
1.自定义ListModel列表模型:

public class FriListModel extends  AbstractListModel {

	ArrayList<User> uArray;//好友类表;

	public FriListModel(ArrayList<User> uArray){
this.uArray=uArray;
}
@Override
public int getSize() {
return uArray.size();
}
@Override
public Object getElementAt(int index) {
return uArray.get(index) ;
}
}

2.自定义单元渲染器

@SuppressWarnings({ "rawtypes", "serial" })
public class FriListCellRenderer extends JLabel implements ListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
User user=(User)value;//把数据转换为user对象, 在AbstractListModel中传过来的是一个user对象;
/*******设置JLable的文字******/
String text="<html>"+user.name+"<br/>"+user.motto+" <html/>";
setText(text);//设置JLable的文字
/*******设置JLable的图片*****/
// 得到此图标的 Image,然后创建此图像的缩放版本。
Image img=user.u.getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT);
setIcon(new ImageIcon(img));//设置JLable的图片
setIconTextGap(30);//设置JLable的图片与文字之间的距离
return this;
}
}

为了能够图片的同比例缩放对于图片进行了修改,是他能够匹配JList的大小;

图片的缩放方法:

Image img = image.getImage();  //得到此图标的 Image(image.getImage())
img = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
// 创建此图像的缩放版本。
image.setImage(img);//该图像就设置为得到的缩放版本
this.image=image;

然后为了使JList中的文字能够换行用了HTML格式来设置JLable的text;

3.构建JList

        //*创建一个Jlist,显示好友类表**/
FriListModel buddy = new FriListModel(uArray);
@SuppressWarnings("rawtypes")
JList buddyList = new JList(buddy);
//设置单元渲染器
buddyList.setCellRenderer(new FriListCellRenderer());
buddyList.setFont(new Font(Font.SERIF, Font.PLAIN, 18));
buddyList.setPreferredSize(new Dimension(360, 350));
/*********给好友列表添加滚动条**************/
JScrollPane jp = new JScrollPane(buddyList);
jp.setPreferredSize(new Dimension(360, 400));
jpanel.add(jp);

这样一个带图片的文字的JList就做好了

最后,来看一看效果:

JAVA实现带图片的列表——JList的更多相关文章

  1. java中带图片按钮的大小设置

    在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题,那就是按钮的大小默认按照图片的大小来显示,这大大降低了界面的美观程度: 按照方法: JB ...

  2. java带图片的邮件发送方法实现

    package sendEmail; import java.util.Properties; import javax.activation.DataHandler; import javax.ac ...

  3. java自带BASE64工具进行图片和字符串转换

    java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  4. Java 用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

  5. java自带BASE64工具进行图片和字符串转换【转】

    java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  6. 【Java】用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

  7. java生成带html样式的word文件

    参考:http://blog.csdn.net/xiexl/article/details/6652230 最近在项目中需要将通过富文本编辑器处理过的文字转换为Word,查了很久,大家通常的解决办法是 ...

  8. java发送带附件的邮件

    /** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...

  9. freemarker导出word带图片

    导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...

随机推荐

  1. 【转】gc日志分析工具

    性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析. Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc ...

  2. gitignore 规范

    gitignore 应该包含 5 块内容: 当前项目需要忽略的文件 项目性质需要忽略的文件(比如是 nodejs 项目,有些文件就需要忽略) 所有项目都需要忽略的文件(比如日志.临时文件) 操作系统需 ...

  3. Array&String总结

    每一部分总结后有实例代码,代码中黄色框方法不改变原数组.PS:所有实例结果均一一运行所得. 符号说明: array和string共享    参数 Array --普通方法 栈:   pop()   p ...

  4. JavaScript和jQuery的类型判断

    此博文为原创,转载请注明出处! 对于类型的判断,JavaScript用typeof来进行. 栗子: console.log(typeof null); //object console.log(typ ...

  5. Android中的 init.rc文件简介

    init.rc脚本是由Android中linux的第一个用户级进程init进行解析的. init.rc 文件并不是普通的配置文件,而是由一种被称为"Android初始化语言"(An ...

  6. LintCode389.判断数独是否合法

    LintCode简单题:判断数独是否合法 问题描述: 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项: 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...

  7. 用户代理字符串识别工具源码与slf4j日志使用

    User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件等.UA也成为了, ...

  8. [Erlang 0113] Elixir 编译流程梳理

    注意:目前Elixir版本还不稳定,代码调整较大,本文随时失效      之前简单演示过如何从elixir ex代码生成并运行Erlang代码,下面仔细梳理一遍elixir文件的编译过程,书接上文,从 ...

  9. SqlServer表结构查询

    一.前言 近两天项目升级数据迁移,将老版本(sqlserver)的数据迁移到新版本(mysql)数据库,需要整理一个Excel表格出来,映射两个库之间的表格字段,示例如下: Mysql数据库查询表结构 ...

  10. Couchbase 环境搭建与使用(C#)

    Couchbase Couchbase Server (前身是 Membase) 是一个分布式的面向文档的 NoSQL 数据库管理系统,该系统联合了 CouchDB 的简单和可靠以及 Memcache ...