Frage

Um dies zu erreichen, habe ich eine benutzerdefinierte Zellrenderer-Klasse erstellt.

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


}

Und ich habe diesen Renderer so eingestellt, dass er von den Spalten meiner Tabelle verwendet wird:

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

Ich möchte die Zeilen, die einen String[] der Länge=7 enthalten, grün und die anderen mit der Standardfarbe.Aber es ist interessant, dass alle meine Reihen grün werden.Wie Sie sehen, habe ich eine Drucklinie.Es wird 4 Mal gedruckt (meine Tabelle hat 12 Zeilen), aber alle Zeilen werden grün dargestellt, statt 4.Was mache ich falsch?

War es hilfreich?

Lösung

Der Grund ist der berüchtigte Farbspeicher (TM) des DefaultableCelEditors: Sie müssen die Farben immer einstellen, anstatt nur in einem Zweig. generasacodicetagpre.

Die genauen Details werden in einem THECY Thread

Andere Tipps

Sie können verwenden XxxCellRenderer, aber besser und einfacher ist die Verwendung prepareRenderer()

Für korrekten Code müssen Sie die Parameter „if-else“ überschreiben oder testen

  • ist ausgewählt

  • hasFocus

  • Spalte

  • Reihe

mehr in Antworten Und Frage über ein ähnliches Problem

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top