java - 使用自定义 JTableCellRenderes
问题描述
我有一个 6 列的 JTable。在表格中添加一行时,我需要为第一行的最后一个单元格添加黑色。第二行的红色。相应的颜色来自不同的方法。这是我的自定义表格单元格渲染器。
class CustomRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column, Color color)
{
JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
label.setBackground(color);
return label;
}
}
这就是我在添加表格行时使用它的方式。
private void addTableRow(String type, String name, String rank, String notes, String location, Color color)
{
boolean isExport = isExportEnable();
tableModel.addRow(new Object[]
{
type,
name,
rank,
notes,
location,
isExport
}
);
for (int i = 0; i < tableModel.getRowCount(); ++i)
{
JTable.getColumnModel().getColumn(6).setCellRenderer((TableCellRenderer) new CustomRenderer().getTableCellRendererComponent(null, null, false, false, i, 6, color));
}
}
当我添加第一行时,它会得到正确的颜色。但是当我添加第二行时,第一种和第二种颜色的单元格都填充了第二种颜色。我怎样才能得到确切的行。实际上我想要的是在添加一行的同时用不同的颜色填充每一行的最后一个单元格。
解决方案
您需要查看概念:编辑器和渲染器以及使用自定义渲染器,因为您显然不了解渲染器在 Swing 中的工作原理。
您永远不要向JTable
's添加组件TableModel
,这不是它的责任。
您将JTable
s配置TableColumn
为使用特定的渲染,例如...
table.getColumnModel().getColumn(6).setCellRenderer(new CustomRenderer);
假设您想要特定列的特定渲染器并且没有为某种类型的对象配置它
推荐阅读
- javascript - 如何将字符串添加到不重复的列表中
- r - 使用条件语句从现有的 for 循环中绘制绘图
- javascript - 那么为什么我不能从 promise 内部操作返回的对象呢?
- javascript - XHR GET 请求参数对象
- c# - 使用反射 linq c# 进行排序
- amazon-web-services - AWS 中强大的无服务器 ETL 流
- replication - 如何使用“typeorm 中的复制”
- python - 'import RPi.GPIO as GPIO' 不起作用,不管我做什么
- django - 在 Django rest 框架中添加 m2m 关系
- oauth - OAuth2 `expires_in` 用途