tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
668
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Bobblz Bobblz ist offline Mitglied Bronze
    Registriert seit
    Jan 2010
    Beiträge
    29
    Hallo zusammen,

    ich habe ein Problem mit JTable, AbstractTableModel, TableCellRenderer.

    Folgendes liegt vor:
    Eine JTable mit meinem eigenen AbstractTableModel wird erzeugt, übergeben wird dem Model eine String-Liste mit Pfaden. Das Model erstellt daraus 3 Spalten mit Name, Zeitpunkt der Änderung und Größe.
    Code JAVA:
    1
    
    tblWest = new JFileListTable(new File("./").list());

    Die CellRenderer füge ich wie folgt im Konstruktor der JTable auf:
    Code JAVA:
    1
    2
    3
    
    getColumn("A").setCellRenderer(new MyFileNameTableCellRenderer());
    getColumn("B").setCellRenderer(new MyFileDateTableCellRenderer());
    getColumn("C").setCellRenderer(new MyFileSizeTableCellRenderer());

    Beim Ersten Aufruf, also beim Start des Programmes funktioniert alles, der Renderer arbeitet wie gewünscht! Wenn ich allerdings während der Laufzeit das TableModel verändere werden die Datenänderungen korrekt übernommen, allerding funktioniert der Renderer nicht mehr!
    Code JAva:
    1
    
    ((JFileListTableModel) tblWest.getModel()).setNewData((new File(westInput.getText())).list());
    Hier wurde aus einem Textfeld ein Pfad entnommen und dem Model übergeben, das so die neuen Daten generiert.

    WARUM arbeitet der Renderer da nicht mehr korrekt?


    Code Java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    
    package mdi;
     
    import javax.swing.JTable;
     
    public class JFileListTable extends JTable {
        
        public JFileListTable(String[] files) {
            super(new JFileListTableModel(files));
            createDefaultColumnsFromModel();
            getColumn("A").setCellRenderer(new MyFileNameTableCellRenderer());
            getColumn("B").setCellRenderer(new MyFileDateTableCellRenderer());
            getColumn("C").setCellRenderer(new MyFileSizeTableCellRenderer());
        }
    }
     
    =========================================================
     
    package mdi;
     
    import java.io.File;
    import java.util.ArrayList;
    import javax.swing.table.AbstractTableModel;
     
     
    public class JFileListTableModel extends AbstractTableModel {
        
        private ArrayList<File> name = new ArrayList<File>();
     
        public JFileListTableModel(String[] files){
            super();
            setNewData(files);
        };
        
        public void setNewData(String[] files) {
            name.clear();
            for (int i=0; i<files.length;i++) {
                name.add(new File(files[i]));
            }
        }
     
        @Override
        public int getColumnCount() {
            return 3;
        }
     
        @Override
        public int getRowCount() {
            return name.size();
        }
     
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return name.get(rowIndex);
        }
     
    }
     
    =======================================================
     
    package mdi;
     
    import javax.swing.JInternalFrame;
    import javax.swing.JPanel;
    import widget.FileChangeEvent;
    import widget.JFileInputField;
    import java.awt.*;
    import java.io.File;
     
    public class JInternalDirCompareFrame extends JInternalFrame implements widget.FileChangeListener {
        
        private JPanel west = new JPanel(new BorderLayout());
        private JPanel east = new JPanel(new BorderLayout());
        private widget.JFileInputField westInput = new JFileInputField("o");
        private widget.JFileInputField eastInput = new JFileInputField("o");
        private JFileListTable tblWest;
        private JFileListTable tblEast;
        
        public JInternalDirCompareFrame() {
            super("DirCompare");
            setLayout(new BorderLayout());
     
            westInput.addFileChangeListener(this);
            eastInput.addFileChangeListener(this);
            
            tblWest = new JFileListTable(new File("./").list());
            tblEast = new JFileListTable(new File("./src").list());
            west.add(westInput, BorderLayout.NORTH);
            west.add(tblWest, BorderLayout.SOUTH);
            east.add(eastInput, BorderLayout.NORTH);
            east.add(tblEast, BorderLayout.SOUTH);
            add(west, BorderLayout.WEST);
            add(east, BorderLayout.EAST);
            
            pack();
            setVisible(true);
     
        }
     
        @Override
        public void fileChanged(FileChangeEvent e) {
            
            if (e.getSource() == westInput) {
                
                ((JFileListTableModel) tblWest.getModel()).setNewData((new File(westInput.getText())).list());
                
            } else if (e.getSource() == eastInput) {
                
                ((JFileListTableModel) tblEast.getModel()).setNewData((new File(eastInput.getText())).list());
                
            }
            
        }
    }

    Grüße
    Robert
     

  2. #2
    Bobblz Bobblz ist offline Mitglied Bronze
    Registriert seit
    Jan 2010
    Beiträge
    29
    Dummer Fehler!

    File.list() gibt nur den Datei-/Ordnernamen zurück ohne Pfad!
    Der Renderer hat gearbeitet, nur di Datei konnte nicht gefundne werden, da ich mit dem files-Array falch umgegangen bin!

    Danke!
     

Ähnliche Themen

  1. Probleme mit TableCellRenderer
    Von Genius2 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 23.06.09, 10:50
  2. AbstractTableModel und getRowCount
    Von ohli im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 16.05.08, 08:55
  3. JTable mit AbstractTableModel
    Von MariusMeier im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 10.04.08, 17:35
  4. AbstractTableModel
    Von brunso im Forum Java
    Antworten: 21
    Letzter Beitrag: 16.07.07, 18:57
  5. Antworten: 11
    Letzter Beitrag: 19.08.05, 13:02