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?


Anmelden zum Antworten