Frage

Ich versuche, mein eigenes Tablemodel für mein JTable zu erstellen (weil ich eine Reihe von JCheckbox's in meine Tabelle einbeziehen möchte). Bevor ich versuchte, das JCheckbox und den benutzerdefinierten AbstractTablemodel einzubeziehen, wird der JTabelle gut angezeigt, wenn ich den Konstruktor der Standard (Objekt [] [], Objekt []) verwendet habe. Ich habe im JTable -Tutorial über die Sonne gelesen, dass diese Konstrukteure eine Standardeinstellung bei der Behandlung aller Daten als Zeichenfolgen verwenden.

Ich habe dann mein benutzerdefiniertes AbstractTablemodel erstellt und bin davon gegangen:

JTable table = new JTable(dataArray, col);

Dazu:

JTable table = new JTable();

Ich gehe davon aus, dass dies den Versuch bezeichnen würde, das JTable mit der maßgefertigten Klasse zu erstellen, die abstraktesTablemodel erweitert, aber jetzt zeigt sich nichts in der JSCROLLPANE.

Ich benutze das falsch? Ich kopierte den Code praktisch aus dem Sun -Tutorial und änderte nur die Namen der beteiligten Datenfaktoren. Ich habe diese Methode auch in derselben Klasse platziert. Gibt es eine andere Möglichkeit, um sicherzustellen, dass Ihre Tabelle mit Ihrem benutzerdefinierten Tabellenmodell erstellt wird? Jede Einsicht würde geschätzt.

War es hilfreich?

Lösung

JTable hat mehrere Konstrukteure, die a nehmen TableModel als Parameter. Suchen Sie das? Aus dem Code -Snippet, den Sie geliefert haben, scheint es, als würden Sie den Standardkonstruktor aufrufen und erwarten, dass er Ihr benutzerdefiniertes Tabellenmodell irgendwie verwendet. (Vielleicht fehlt ein Code das?). Wenn Sie den Standardkonstruktor verwenden, JTable wird intern eine erstellen DefaultTableModel Instanz und benutze das.

Bearbeiten:Kommentare nehmen keinen Code sehr gut an, also fügen Sie hier hinzu: Um die Tabelle für Ihr Modell zu verwenden, würden Sie so etwas tun:

MyTableModel model = new MyTableModel();
// ...initialise model if required
JTable table = new JTable(model);

Andere Tipps

Wie Sie beobachtet haben, ist Ash genau das Richtige für Ihr Datenmodell in der JTable Konstrukteur. Wenn Ihr Modell Ihres Modells getColumnClass() kehrt zurück Boolean.class, Sie erhalten ein Kontrollkästchen Rendererer standardmäßig. Sie mögen das vielleicht Beispiel Dies zeigt die Verwendung eines benutzerdefinierten Renderers und Editors.

OK. Nachdem ich meinen Code überprüft habe, wurde mir klar, dass der Link zu Ihrem benutzerdefinierten Tabellenmodell nicht gefunden wird, wenn ich Konstruktoren auslässt. Also, wenn Sie die Klasse erstellt haben:

class MyTableModel extends AbstractTableModel {
//code here
}

Sie müssen es im JTable -Konstruktor wie folgt instanziieren:

JTable table = new JTable(new MyTableModel());

Sie können es also nicht einfach leer lassen und erwarten, dass es die neue AbstractTablemodel -Klasse "findet".

Sie müssen sich ausdehnen AbstractTableModel, und übergeben Sie dies als Parameter für den Konstruktor Ihres JTabels. (Wie Marc). Zusätzlich zur erforderlichen Methode müssen Sie diese Methode definieren, um die tatsächlichen Kontrollkästchen anzuzeigen:

 public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

Dies sagt Ihnen, wie Sie jede Zelle rendern. Wenn Sie dies nicht überschreiben, wird es nur als Zeichenfolge gezeigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top