1

行ソーターを使用してテーブルを並べ替えようとしています。

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

注: これは単なるサンプル コードです。実際の機能はありません。並べ替えると、並べ替えは完全に行われますが、色を変更するレンダラー機能は行われません。以前にこの問題に直面した人はいますか?助けてください

4

1 に答える 1

4

レンダラーのロジックを次のように拡張する必要があります。

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

また、各条件に応じて背景色を設定することもできます。これを行う理由は、DefaultTableCellRendererが各セルに順番に適用される「ゴム印」のように機能するためです。たとえば、行 5、列 1 のセルの値が k >= 0 の場合、このセルと後続のすべてのセルの前景色を赤に切り替えます。したがって、チェックが失敗した場合は、明示的に「通常の」前景色に戻すことが重要です。

于 2010-11-19T12:41:58.183 に答える