-
Swing的JTable表格列中插入图片
1.实现效果
给swing的JTable实现如下效果,JTable的列表中插入图片
2.实现步骤
这里准备了三张方式的图片:网络图片、工程类目录图片、本地磁盘图片
工程目录如下:
关键步骤有两个:
- 创建Icon对象
- 重写DefaultTableModel类的getColumnClass方法
3.完整代码
复制代码
-
package com.qy; import java.awt.BorderLayout; import java.net.MalformedURLException; import java.net.URL; import java.util.Enumeration; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.border.EmptyBorder; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumn; /** * @Author 贺刘芳 * @Time 2021年7月25日 下午11:21:33 * @Version 1.0 * <p>Description:</p> */ public class JTableImg extends JFrame { private JPanel contentPane; private JTable table; public static void main(String[] args) { JTableImg frame = new JTableImg(); frame.setVisible(true); } public JTableImg() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭程序退出 setSize(566, 429);//设置窗口大小 setLocationRelativeTo(null);//设置窗口居中 contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null);//设置布局方式为绝对布局 JPanel panel = new JPanel(); panel.setBounds(10, 10, 530, 349); contentPane.add(panel); panel.setLayout(new BorderLayout(0, 0)); //核心步骤1:创建Icon对象 //相对于类路径读取图片 Icon icon1 = new ImageIcon(this.getClass().getResource("/images/33.jpg")); //绝对路径读取图片 Icon icon2 = new ImageIcon("D:/images/22.jpg"); //网络路径读取图片 Icon icon3 = null; try { icon3 = new ImageIcon(new URL("https://avatar.csdnimg.cn/3/F/F/3_toto1297488504_1548903051.jpg")); } catch (MalformedURLException e) { e.printStackTrace(); } table = new JTable(); String[] columnNames = new String[] {"头像", "姓名"}; //将图片Icon对象放入表格数据数组 Object[][] data = new Object[][] { {icon1, "Text 1"}, {icon2, "Text 2"}, {icon3, "Text 3"} }; //将表格数据数组放入表格模型,并重写getColumnClass方法 table.setModel(new DefaultTableModel(data,columnNames){ @Override //核心步骤2:重写getColumnClass方法 public Class<?> getColumnClass(int columnIndex) { return getValueAt(0, columnIndex).getClass(); } }); //设置每一列的列宽 //table.getColumn(columnNames[0]).setPreferredWidth(59); table.setRowHeight(0, 80); table.setRowHeight(1, 80); table.setRowHeight(2, 80); table.setRowHeight(3, 80); //fitTableColumns(table); //非必须,设置列宽随表格内容自动调整 JScrollPane jsp = new JScrollPane(table); jsp.setSize(530, 349); panel.add(jsp); } //设置列宽随表格内容自动调整 参考博客:https://blog.csdn.net/tototuzuoquan/article/details/8982618 public void fitTableColumns(JTable myTable) { // 設置table的列寬隨內容調整 JTableHeader header = myTable.getTableHeader(); int rowCount = myTable.getRowCount(); Enumeration columns = myTable.getColumnModel().getColumns(); while (columns.hasMoreElements()) { TableColumn column = (TableColumn) columns.nextElement(); int col = header.getColumnModel().getColumnIndex(column.getIdentifier()); int width = (int) myTable.getTableHeader().getDefaultRenderer() .getTableCellRendererComponent(myTable,column.getIdentifier(), false, false, -1, col) .getPreferredSize().getWidth(); for (int row = 0; row < rowCount; row++) { int preferedWidth = (int) myTable.getCellRenderer(row, col) .getTableCellRendererComponent(myTable,myTable.getValueAt(row, col), false, false,row, col) .getPreferredSize().getWidth(); width = Math.max(width, preferedWidth); } header.setResizingColumn(column); column.setWidth(width + myTable.getIntercellSpacing().width); } } }
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比