Renderer für TableHeader einer JTable mit mehreren Tabellenmodellen

Copia

Grünschnabel
Hallo zusammen,

ich bin gerade dabei meine Matrix in einer JTable zu realisieren und bin gerade dabei, den TableHeader anzupassen.
Für meine JTable benutze ich drei verschiedene Tabellenmodelle. Eins enthält alle Daten, das andere filtert leere Reihen und das dritte leere Spalten raus.
Seitdem ich die Tabellenmodelle eingebaut habe, die Reihen und Spalten filtern, werden im TableHeader nicht mehr die richtigen Texte angezeigt sondern nur noch die Standardüberschriften "A", "B", ...
Jetzt schätze ich, das hat irgendwas mit irgendwelchen Koordinaten oder so zu tun?
Wie berücksichtige ich sowas denn im Renderer vom TableHeader? Ich steh gerade irgendwie ein bisschen aufm Schlauch...

Mein Renderer für den TableHeader sieht übrigens ganz schlicht so aus:

Code:
public class V8HeaderCellRenderer implements TableCellRenderer {
        
        public Component getTableCellRendererComponent(JTable table, Object value, 
                boolean isSelected, boolean hasFocus, int row, int column) {
                
                JComponent c = null;
                if(value instanceof String ) {
                        c = createVLabel((String)value);
                } else {
                        c = new JLabel(value.toString());
                        ((JLabel)c).setHorizontalAlignment(SwingConstants.CENTER);
                }
                c.setFont(table.getFont());
                c.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
                c.setOpaque(true);
                return c;
        }
        
        private JComponent createVLabel(String caption) {
                JLabel ret = new JLabel();
                ret.setIcon(new VTextIcon(ret, caption, VTextIcon.ROTATE_LEFT));
                ret.setFont(ret.getFont().deriveFont(Font.PLAIN));
                return ret;
        }
}

Und value enthält halt den "falschen" Wert :-(
 
Howdie.

Mich wundert es nicht, dass deine Tabellen-View durcheinanderkommt, wenn du mehrere Models verwendest.... IMHO hat eine Table ein Model, dass die Daten enthält und einen Renderer, der die Darstellung des Models auf der Oberfläche regelt.

Warum machst du das denn über mehrere Models? Da gibt es doch diverse andere Möglichkeiten. Du könntest z.B. vor dem Hinzufügen zum Model überprüfen, ob leere Objekte hinzugefügt werden und dies verhindern, oder das (einzige!) Model überprüfen und die leeren Spalten/Reihen löschen.

Falls du es unbedingt mit mehreren Models machen willst, musst du die Header-Daten auch an alle Models übergeben, sonst kenn das Table den richtigen Header nicht. Wie gesagt, es gibt nur ein aktives Model, aus diesem holt sich das View auch die Header-Daten.

Gruß
miffi
 
Howdie.

Mich wundert es nicht, dass deine Tabellen-View durcheinanderkommt, wenn du mehrere Models verwendest.... IMHO hat eine Table ein Model, dass die Daten enthält und einen Renderer, der die Darstellung des Models auf der Oberfläche regelt.
Man kann doch aber mehrere TableModels übereinander legen und dann die Koordinaten entsprechend übersetzen.

Warum machst du das denn über mehrere Models?
So habe ich immer meinen gesamten Datenbestand, falls ich z.B. von anderer Stelle auf die ungefilterten Daten zugreifen möchte.

Falls du es unbedingt mit mehreren Models machen willst, musst du die Header-Daten auch an alle Models übergeben
Ja danke, jetzt hat's klick gemacht. Ich musste ja einfach nur die Methode "getColumnName" in allen TableModels implementieren ;-) (Warum werden hier die Smileys eigentlich "falsch" dargestellt?)
 
Zuletzt bearbeitet:
Zurück