swing中JList控件使用:每一项以 图片+文字(文字在图片的下面) 的形式显示并且在水平方向排列
2016-01-12 23:49
706 查看
最近研究了一下java swing中jlist控件的使用方式。要达到的效果如标题,要实现这个功能,重点在一下几个方面:
需要改变JList的cellRender来支持对图片的显示,默认的cellRender只会显示文本字符串
设置Jlist的每一项的显示方向为horizon
设置每一项选中后的背景
接下来是代码实现:
创建一个ImageListModel,继承AbstractListModel,设置为JList的列表模型
这里ImageListModel 每一个元素都是一个File,这个file为png格式的图片文件。
2. 创建ImageCellRender,更改Jlist每一项的显示样式
3. Demo
4. 最后运行的效果
需要改变JList的cellRender来支持对图片的显示,默认的cellRender只会显示文本字符串
设置Jlist的每一项的显示方向为horizon
设置每一项选中后的背景
接下来是代码实现:
创建一个ImageListModel,继承AbstractListModel,设置为JList的列表模型
package com.swing.jlist; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractListModel; public class ImageListModel extends AbstractListModel<File> { private static final long serialVersionUID = 1L; private List<File> imageFile = new ArrayList<File>(); public void addElement(File file){ this.imageFile.add(file); } public int getSize() { return imageFile.size(); } public File getElementAt(int index) { return imageFile.get(index); } }
这里ImageListModel 每一个元素都是一个File,这个file为png格式的图片文件。
2. 创建ImageCellRender,更改Jlist每一项的显示样式
package com.swing.jlist; import java.awt.Component; import java.io.File; import javax.swing.DefaultListCellRenderer; import javax.swing.ImageIcon; import javax.swing.JList; import javax.swing.SwingConstants; public class ImageCellRender extends DefaultListCellRenderer { private static final long serialVersionUID = 1L; public Component getListCellRendererComponent(JList<? extends Object> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value instanceof File) { File imageFile = (File) value; try { ImageIcon icon = new ImageIcon(imageFile.toURI().toURL()); setIcon(icon); setText(imageFile.getName()); <span style="color:#ff0000;">setVerticalTextPosition(SwingConstants.BOTTOM); setHorizontalTextPosition(SwingConstants.CENTER);</span> } catch (Exception e) { e.printStackTrace(); } } return this; } }这里ImageCellRender继承DefaultListCellRender,DefaultListCellRender继承于JLabel,所以只要将图片赋给Jlabel就可以更改显示样式,而要达到文字在图片的下面显示的效果就需要设置JLabel的TextPosition。
3. Demo
package com.swing.jlist; import java.awt.BorderLayout; import java.io.File; import java.io.FileFilter; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JScrollPane; public class JListDemo extends JFrame { private static final long serialVersionUID = 1L; public JListDemo(){ JList<File> list = new JList<File>(); ImageListModel listModel = new ImageListModel(); File[] files = new File("pic").listFiles(new FileFilter() { public boolean accept(File file) { return file.getName().endsWith("png"); } }); for(File file: files){ listModel.addElement(file); } list.setModel(listModel); list.setCellRenderer(new ImageCellRender()); list.setLayoutOrientation(JList.HORIZONTAL_WRAP); list.setVisibleRowCount(1); JScrollPane scrollPane = new JScrollPane(list); getContentPane().add(scrollPane,BorderLayout.CENTER); getContentPane().add(new JLabel("带图片的Jlist"),BorderLayout.NORTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); pack(); setVisible(true); } public static void main(String[] args) { new JListDemo(); } }
4. 最后运行的效果
相关文章推荐
- <03>消息处理
- @Autowired 注释与@Qualifier 注释
- angular2学习 -- 基本配置学习
- C语言:【单链表】查找单链表的倒数第k个节点,要求只能遍历一次
- Spring学习1:环境搭建
- 等价二叉树
- 终于有人把P2P、P2C、O2O、B2C、B2B、C2C 的区别讲透了
- 解密ThreadLocal
- 2015年12月PMP备考经验
- Java之虚拟机Dalvk原理简介
- performSelector和forwardInvocation之消息的派发和转发
- 雷达数据下载
- CocoaPods使用相关
- java socket SocketException: recvfrom failed: ECONNRESET
- 享元模式
- Python爬虫学习稿(三)
- 为什么要用GCD-Swift2.x
- Android之View的过程分析
- HDU1540(线段树统计连续长度)
- C语言:【单链表】查找单链表的中间节点,要求只能遍历一次