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!!!
Antwort
Zu viele Anzeigen?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.
@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;
}
};