5 Stimmen

JTable deaktivieren Checkbox in Zelle

Hallo Ich habe eine JTable und ich möchte grau aus alle deaktivierten Kontrollkästchen Zellen, die ich mit einem benutzerdefinierten Renderer Überprüfung isEnabled() versucht und dann ändern die Hintergrundfarbe aber immer noch nicht workin. Irgendwelche Vorschläge? Danke!!!

14voto

trashgod Punkte 199887

Wie bereits in Konzepte: Editoren und Renderer In der Regel wird ein einziger Zellrenderer verwendet, um alle Zellen zu zeichnen, die denselben Datentyp enthalten. Sie müssen die enabled Zustand in Ihrem Tischmodell .

Nachtrag: Als konkretes Beispiel wird das Datenmodell in diesem Beispiel ist ein einfaches Array aus Date Instanzen. Überschreiben von getTableCellRendererComponent() wie unten gezeigt, werden die ungeraden Tage deaktiviert. In diesem Fall ist "ungerade" eine Eigenschaft, die der Date Wert selbst, aber das Modell könnte nach jeder verwandten Eigenschaft abgefragt werden.

disabled image

@Override
public Component getTableCellRendererComponent(JTable table,
    Object value, boolean isSelected, boolean hasFocus, int row, int col) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime((Date) value);
    Component c = super.getTableCellRendererComponent(
        table, value, isSelected, hasFocus, row, col);
    c.setEnabled(calendar.get(Calendar.DAY_OF_MONTH) % 2 == 0);
    return c;
}

Nachtrag: In dem obigen Beispiel ist die DateRenderer wird hervorgerufen, weil die TableModel gibt die Typ Token Date.class , für die sie als Standard festgelegt wurde.

table.setDefaultRenderer(Date.class, new DateRenderer());

Eine identische Aussehen kann durch Überschreiben von prepareRenderer() wie unten gezeigt, aber die Methode wird aufgerufen für alle Zellen, unabhängig von der Klasse. Das Ergebnis ist, prepareRenderer() ist ideal, um ganze Zeilen zu beeinflussen, wie in Tabellenzeilen-Rendering .

private final JTable table = new JTable(model) {

    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
        Component c = super.prepareRenderer(renderer, row, col);
        if (col == DATE_COL) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime((Date) model.getValueAt(row, col));
            c.setEnabled(calendar.get(Calendar.DAY_OF_MONTH) % 2 == 0);
        }
        return c;
    }
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X