【问题标题】:JTable renderer with sorting带排序功能的 JTable 渲染器
【发布时间】:2010-11-19 12:31:57
【问题描述】:

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

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);
}

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

【问题讨论】:

    标签: java swing jtable renderer


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 2020-09-17
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多