jTable setDefaultRenderer mit java.util.Date geht nicht!?!?
-
Hallo Liebes Forum
Ich versuch, in einer jTable den Renderer für eine Spalte mit Datum zu setzen. Es geht nicht. Für Integer und URLs gehts, nicht aber für java.util.Date. Mach ich was falsch?
Wie kann ich den Built-in renderer überschreiben?
Es folgt etwas code..Das Model:
public class DownloadLinkTableModel extends AbstractTableModel { // [..] private Class[] columnClasses = {Integer.class, URL.class, Date.class}; // [..] @Override public Class getColumnClass(int c) { return columnClasses[c]; }
Der Renderer:
public class DownloadDateColorRenderer extends JLabel implements TableCellRenderer { private Border unselectedBorder = null; private Border selectedBorder = null; private boolean isBordered = true; private DateFormat formatter; public DownloadDateColorRenderer(boolean isBordered) { this.isBordered = isBordered; setOpaque(true); } public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setValue(value); setForeground(Color.RED); if (isBordered) { if (isSelected) { if (selectedBorder == null) { selectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getSelectionBackground()); } setBorder(selectedBorder); } else { if (unselectedBorder == null) { unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getBackground()); } setBorder(unselectedBorder); } } return this; } public void setValue(Object value) { if (value.getClass().equals(Date.class)) { if (formatter == null) { formatter = DateFormat.getDateInstance(); } setText((value == null) ? "" : formatter.format(value)); } else { setText(value.toString()); } } }
Die View:
// [..] fileTable.setModel(new DownloadLinkTableModel(links)); fileTable.setFillsViewportHeight(true); fileTable.setName("fileTable"); // NOI18N fileTable.getTableHeader().setReorderingAllowed(false); TableRowSorter<DownloadLinkTableModel> sorter = new TableRowSorter<DownloadLinkTableModel>((DownloadLinkTableModel)fileTable.getModel()); fileTable.setRowSorter(sorter); fileTable.setDefaultRenderer(Number.class, new DownloadDateColorRenderer(true)); // geht fileTable.setDefaultRenderer(URL.class, new DownloadDateColorRenderer(true)); // geht fileTable.setDefaultRenderer(Date.class, new DownloadDateColorRenderer(true)); // geht nicht ??? fileTableScrollPane.setViewportView(fileTable); // [..]
Ein Test:
System.out.println(Date.class.equals(fileTable.getColumnClass(2)));
gibt
true
aus
-
was heißt denn jetzt genau geht nicht? Beschreib den Fehler mal bitte etwas genauer. Dein Code sieht beim ersten Durchgucken für mich in Ordnung aus.
-
naja es passiert halt nichts, das datum bleibt schwarz
-
..weiss das keiner?