JAVA实现带图片的列表——JList
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的更多相关文章
- java中带图片按钮的大小设置
在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题,那就是按钮的大小默认按照图片的大小来显示,这大大降低了界面的美观程度: 按照方法: JB ...
- java带图片的邮件发送方法实现
package sendEmail; import java.util.Properties; import javax.activation.DataHandler; import javax.ac ...
- java自带BASE64工具进行图片和字符串转换
java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...
- Java 用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- java自带BASE64工具进行图片和字符串转换【转】
java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...
- 【Java】用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- java生成带html样式的word文件
参考:http://blog.csdn.net/xiexl/article/details/6652230 最近在项目中需要将通过富文本编辑器处理过的文字转换为Word,查了很久,大家通常的解决办法是 ...
- java发送带附件的邮件
/** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...
- freemarker导出word带图片
导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...
随机推荐
- [更新]跨平台物联网通讯框架 ServerSuperIO v1.2(SSIO),增加数据分发控制模式
1.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO) 2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案 3.C#工业 ...
- HttpSession与Hibernate中Session的区别
一.javax.servlet.http.HttpSession是一个抽象接口 它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户 ...
- Oracle安装
1.根据自己的操作系统,到Oracle官网下载相应的安装包 下载地址:http://download.oracle.com/otn/nt/oracle11g/112010/win32_11gR2_cl ...
- position总结图
- Listview的Item中有CheckBox、Button等的焦点处理
ListView的item布局中有CheckBox.Button等会获取焦点的控件会抢走焦点,造成ListView的item点击事件相应不了. 解决方法:控件设置 android:clickable= ...
- (四)Spark集群搭建-Java&Python版Spark
Spark集群搭建 视频教程 1.优酷 2.YouTube 安装scala环境 下载地址http://www.scala-lang.org/download/ 上传scala-2.10.5.tgz到m ...
- Java导出excel
一.介绍 常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际的开发中,很多时候需要实现导入.导出Excel的应用. ...
- 幼儿园的 selenium
from selenium import webdriver *固定开头 b=webdriver.Firefox() *打开火狐浏览器 browser. ...
- nginx 虚拟主机基于端口的搭建
首先配置nginx.conf [root@localhost conf]# cat nginx.confworker_processes 1;user nginx nginx;error_log /a ...
- mysql报错: 1548-Cannot load from mysql.proc. The table is probably corrupted 解决办法
use mysql: ALTER TABLE `proc` MODIFY COLUMN `comment` text CHARACTER SET utf8 COLLATE utf8_bin NOT N ...