2

これを実現するために、カスタムセルレンダラークラスを作成しました。

public class MatchTableCellRenderer extends DefaultTableCellRenderer{


    public Component getTableCellRendererComponent (JTable table,
                                                    Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
        Component cell;
        cell = super.getTableCellRendererComponent(
                table, obj, isSelected, hasFocus, row, column);
        if( ((String[]) ((MatchTableModel) table.getModel()).getRow(row)).length==7 ){
            System.out.println(((String[]) ((MatchTableModel) table.getModel()).getRow(row))[0]+" "+((String[]) ((MatchTableModel) table.getModel()).getRow(row))[6]);

            cell.setForeground(Color.green);

        }
        return cell;
    }


}

そして、このレンダラーをテーブルの列で使用するように設定しました。

    tempColumn = table.getColumnModel().getColumn(0);
    tempColumn.setCellEditor(new MacColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(1);
    tempColumn.setCellEditor(new IpColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(2);
    DefaultCellEditor dfEditor=new DefaultCellEditor(new JTextField());
    dfEditor.setClickCountToStart(2);
    tempColumn.setCellEditor(dfEditor);
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

長さ=7の緑のString[]を含む行と、デフォルトの色の行が必要です。しかし、私のすべての行が緑色になるのは興味深いことです。ご覧のとおり、印刷ラインがあります。4回印刷されますが(私のテーブルには12行あります)、すべての行が4行ではなく緑色になります。何が問題なのですか。

4

2 に答える 2

3

を使用できますXxxCellRendererが、より適切で最も簡単なのはprepareRenderer()

正しいコードを得るには、if-elseがpatametersに従う場合、内部でオーバーライドまたはテストする必要があります

  • isSelected

  • hasFocus

similairの問題についての回答質問の詳細

于 2012-07-27T08:51:02.690 に答える
3

その理由は、DefaultTableCellEditorの悪名高いカラーメモリ(TM)です。1つのブランチだけでなく、常に色を設定する必要があります。

if (myCondition) {
   setBackground(...) {
} else {
   setBackground(...) 
} 

正確な詳細は最近のスレッドで説明されています

于 2012-07-27T10:23:50.420 に答える