java - 带排序功能的 JTable 渲染器

标签 java swing jtable renderer

我正在尝试使用行排序器对表格进行排序。

RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
cTable.setRowSorter(sorter);

我正在使用扩展 DefaultTableCellRenderer 的渲染器。我正在使用渲染器根据单元格的值以某种颜色绘制单元格的内容。

cTable.setDefaultRenderer(Object.class,new <renderer name>());

例如:

public Component getTableCellRendererComponent(JTable table, Object v,
            boolean isSelected, boolean hasFocus, int row, int column)
    {

         super.getTableCellRendererComponent(table, v, isSelected, hasFocus,
                    row, column);
int k=table.getValueAt(row,column);
    if (k >= 0)                             this.setForeground(Color.red);
}

注意:这只是一个示例代码,没有真正的功能。 当我排序时,排序发生得很好,但是改变颜色的渲染器功能没有发生。有没有人早些时候遇到过这个问题?请帮忙

最佳答案

您需要将渲染器中的逻辑扩展到:

if (isSelected) {
  this.setForeground(table.getSelectionForeground());
} else if (k >= 0) {
  this.setForeground(Color.red);
} else {
  this.setForeground(table.getForegroundColor());
}

您可能还希望根据每个条件设置背景颜色。这样做的原因是因为 DefaultTableCellRenderer 就像一个“橡皮图章”,依次应用于每个单元格。例如,如果第 5 行第 1 列的单元格的值为 k >= 0,则您要将前景色切换为红色此单元格和所有后续单元格。因此,如果检查失败,请务必明确将其设置回为“正常”前景色。

关于java - 带排序功能的 JTable 渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4224987/

相关文章:

java - Groovy 每个方法都返回不正确的结果

java - Java 中简单的横向卷轴游戏出现滞后

java - Decimalformat:在 JTable 中不需要用逗号替换点

java - 向 JButton 添加第二个边框

Java:如果行由 AbstractTableModel 插入,如何将行(数据)显式插入 JTable

java - 删除选定的 JTable 元素

java - 返回具有相似参数的不同类型的方法的命名约定

java - 无法访问javax.servlet.Filter;找不到javax.servlet.Filter的类文件

java - Maven:如何使用没有自己的存储库的依赖项

java - 如何在 JList 中启用拖放