JTable,每列多个类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JTable,每列多个类相关的知识,希望对你有一定的参考价值。
我想做一张包含第1行String
和Image
的表。
我使用这个(我将2改为0以获得String
表)。我有办法做到这两点吗?
DefaultTableModel table = new DefaultTableModel(model.getRowCount(),model.getColumnCount()) {
public Class getColumnClass(int column)
{
return getValueAt(2, column).getClass();
}
};
答案
默认渲染器无法渲染每个类的每个实例,并且不会渲染Image
实例。
如果你愿意使用(或者像安德鲁所说的那样滥用)JTable根据单元类进行任意渲染,你必须编写自己的渲染器。您可以将您的课程建立在DefaultTableCellRenderer
上,或者根据您的需要实施自己的TableCellRenderer
。
然后使用JTable.setDefaultRenderer
为每个特定的类类型安装渲染器(注意,典型的字符串渲染由默认渲染器处理)。
另一答案
在我看来,“User1,User2,...”应该是列标题而不是TableModel的数据。
行的数据应该是ImageIcon而不是文件的名称。渲染器不应从文件中读取数据。
阅读How to Use Tables上的Swing教程中的部分,了解有关使用JTable的基础知识的更多信息。
如果确实需要在每个单元格中使用混合数据,则可以通过检查单元格中存储的数据的类类型来获取单元格的渲染器。
JTable table = new JTable(data, columnNames)
{
public TableCellRenderer getCellRenderer(int row, int column)
{
int modelColumn = convertColumnIndexToModel(column);
Class cellClass = getModel().getValueAt(row, modelColumn).getClass();
return getDefaultRenderer( cellClass );
}
};
当然你需要:
- 确保单元格值不为空
- 将Image存储为ImageIcon,而不是文件的String名称
以上是关于JTable,每列多个类的主要内容,如果未能解决你的问题,请参考以下文章
Jtable ListSelectionListener不响应jtable操作并响应另一个jtable操作,在同一个类中