在 JTable 中添加图像或图标

JTable 类提供了一种插入图标或图像的方法。JTable 需要指定存储在表列中的对象类型,以便它可以选择适当的呈现。这是通过调用方法 getColumnClass(...):

public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
Java 确定是否指定了 JTable 的渲染器,否则 JTable 将调用模板并调用 getColumnClass() 检索第一行中的单元格类型。然后,它将其与保存演绎版的数据类型列表进行比较。此列表由 JTable 启动,但您可以添加或编辑。渲染包括 ImageIcon 和 Icon.

以下示例演示如何将图像添加到列中:

import javax.swing.*;
导入 javax.swing.table.*;

public 类 Table_image 扩展 JFrame
{
public Table_image()
{
ImageIcon icon1 = new ImageIcon(1.png”);
ImageIcon icon2 = new ImageIcon(2.png”);
ImageIcon icon3 = new ImageIcon(3.png”);
ImageIcon icon4 = new ImageIcon(4.png”);

string[] title = {操作系统”, 受欢迎程度”};
对象[][] 数据 =
{
{icon1, Android: 76.6%”},
{icon2, IOS: 19.7%”},
{icon3, Windows Phone: 2.8%”},
{icon4, BlackBerry OS: 1%”},
};

DefaultTableModel 模板 = new DefaultTableModel(data, Title);
JTable table = new JTable( template )
{
/*自动检测数据类型
*所有列
*/
public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
};
//更改行高
table.setRowHeight(100);
JScrollPane scrollPane = new JScrollPane( table);
getContentPane().add( 滚动窗格 );
}

public static void main(String[] args)
{
Table_image frame = new Table_image();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
}
执行后的结果:

将添加图像图标添加到

如果不实现 getColumnClass,则该列将包含文本(文件名)而不是图像。例如,JTable 将显示1.png”.

如果您使用的是继承自 AbstractTableModel,不要忘记实现 getColumnClass 在模型 class.

class 中 模型扩展 AbstractTableModel{
private Object[][] 数据;
private String[] 标题;

public Model(Object[][] data, String[] title){
this.data = 数据;
this.title = 标题;
}

public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}

public int getColumnCount() {
return this.title.length;
}

public int getRowCount() {
return this.data.length;
}

public Object getValueAt(int row, int col) {
return this.data[row][col];
}
}
在 Java 官方网站上阅读更多关于编辑器和渲染器的信息:Editors and Renderers.