komplette Objekte in JTable einfügen

Ratzer

Mitglied
Hallo!
Ich habe ein Problem mit JTables und zwar sieht mein TableModel bisher so aus, dass ich alle Eigenschaften des Objekts der addRow Methode übergebe und dann anzeigen lasse. Jetzt habe ich aber eine Eigenschaft, die nicht als Wert in die JTable gezeichnet werden soll, sondern welche einfach unsichtbar vorhanden sein müsste, damit ich darauf zugreifen kann. Also bisher siehts so aus:
Java:
public void addRow(Objekt o) {		
	addRow(new Object[]{o.getEigenschaft1(), o.getEigenschaft2(), o.getEigenschaft3()});
}
Jetzt habe ich aber noch ein int-Array, welches ich irgendwie durch Zugriff auf das JTable auslesen muss. Wie könnte das gehen, wenn von dem int-Array nichts in der Tabelle drin steht?
 

Marco13

Top Contributor
Manche Leute wollen einfach nur die Antwort. Falls das hier auch der Fall ist, ignorier' diesen Post.

Das macht keinen Sinn. Das TableModel beschreibt das, was in der Tabelle ist. Es ist nicht da, um irgendwelche (für die Table nicht relevanten) Daten "zwischenzuspeichern". Wenn es im Model steht, zeigt die Tabelle es auch an. Es klingt grob nach einer fehldenen Trennung zwischen eigenem Business-Modell und View (also JTable - auch wenn die selbst wieder ein Model enthält...). Beschreib' vielleicht mal, was dagegen spricht, die echten Objekte (einschließlich der int-Arrays) irgendwo so zu speichern, dass man dort, wo du jetzt auf deine "unsichtbaren" Daten zugreifen würdest, auch direkt auf die "echten" Daten zugreifen kann.
 

Ratzer

Mitglied
Naja, das, was in dem int-Array steht, ist schon für die Tabelle gedacht. In dem Array stehen Nullen und Einsen drin. Eine Eins bedeutet, dass für die Zelle der Rahmen eine andere Farbe bekommen soll. Ich wüsste gerade nicht, wie ich das anders machen könnte, anstatt es dem Objekt direkt mitzugeben und von da aus zur JTable.
 

Marco13

Top Contributor
Hm... wird diese Information dann an einen eigenen TableCellRenderer weitergereicht? Wie wird die da denn verwendet, bzw. wer erstellt, verwaltet und verwendet dieses Array allgemein?
 

Ratzer

Mitglied
Ja, das Array müsste dann vom TableCellRenderer verarbeitet werden. Darüber habe ich mir allerdings noch nicht so Gedanken gemacht. Vielleicht müsste ich das Array dann doch global machen, wenn es mit dem TableCellRenderer nicht funktionieren sollte.
 

Marco13

Top Contributor
Global klingt erstmal nicht gut ;) Ich meinte nur, dass wenn dieses Array vielleicht ohnehin schon z.B. direkt IN den Objekten liegen würde, und die Objekte vielleicht sowieso schon in einer Liste oder so, man evtl. sowohl das TableModel als auch den CellRenderer direkt auf diese Liste zugreifen lassen könnte. Mir ist bisher nicht klar, welche Rolle dieser Array hat. Ist das was rein visuelles, oder irgendeine Eingeschaft der Objekte, die sowieso schon irgendwo gespeichert ist?
 

Ratzer

Mitglied
Also meine Objekte haben verschiedene Strings und da können unter Umständen falsche Daten drinne stehen. In der Tabelle sollen diese Zellen dann rot markiert werden. Deswegen sollen die Objekte ein int-Array bekommen, in dem dann an mehreren Positionen i eine Eins stehen kann, was dann bedeutet, dass die Zelle beim Index "i" (wo eine Eins steht) rot gefärbt wird. Ich übergebe ja dem TableModel das komplette Objekt, das bedeutet aber nicht, dass der CellRenderer auch das komplette Objekte bekommt, oder?
Könnte man eventuell auch von meinem Objekt ein anderes Objekt ableiten, was z.B. die Schnittstelle "Colored" implementiert? Würde mir das helfen?
 

Marco13

Top Contributor
Nicht direkt. Dem TableModel wird ja nicht das Objekt selbst übergeben, sondern nur seine Eigenschaften (einzeln, als ein Array, der die neue Zeile ergibt). Der CellRenderer bekommt natürlich erstmal nur diese Werte, und weiß nicht mehr, zu welchem Objekt sie gehören. Das mit den Arrays ist mir aber immernoch nicht klar.

Es gibt ähnliche Fälle, wo diese Entscheidung direkt im CellRenderer getroffen wird, im Sinne von
Code:
Component getCellRendererComponent(....Object value...)
{
    if (value==null) setBackground(Color.RED);
    else setBackground(Color.WHITE);
    ...
oder so... Aber vielleicht ist das hier nicht so direkt anwendbar. Du hättest also stattdessen eine Klasse
Java:
class SomeClass
{
    String getEigenschaft0() { ... }
    int getEigenschaft1() { ... }
    float getEigenschaft2() { ... }

    int[] getDiesesGültigkeitsDing() { ... }
}
und die Letzte Methode würde dann einen array wie [0,1,1] zurückgeben, wenn die Eigenschaften 1 und 2 "ungültig" sind? Das klingt irgendwie seltsam (mangels Information kann man aber nur sagen, dass es seltsam klingt, und nicht ob es das auch ist - vielleicht ist es sinnvoll :bahnhof: ). Ist das so gedacht?
 

Ratzer

Mitglied
Ja, genauso ist das Array gedacht. Also ich brauche ja ein Tupel aus Zellenindex und Richtig/Falsch. Deswegen dachte ich mir, dass ein Array die beste Lösung ist. Der Arrayindex bezeichnet, welche Spalte gemeint ist und 0 sowie 1 stehen dann für Richtig/Falsch.
 

bERt0r

Top Contributor
Hmm da würd ich sagen, du machst dir ein TableModel, dem übergibst du deine int-arrays mit den Fehlerhaften Zellen.
Das TableModel speichert die in einer ArrayList und machst eine Methode getCellColor(int row,int col) die die Werte aus der ArrayList zurückgibt.
Deinem CellRenderer musst du wohl oder übel dein TableModel übergeben, und bei jedem getTableCellRendererComponent prüfst du mit getCellColor welche Farbe du benötigst.
 

Marco13

Top Contributor
Hmja, das wäre SEHR pragmatisch ... was mir da (so aus der Distanz) ein paar Bauchschmerzen macht, ist nicht zuletzt, dass da mit einem Array (was oft nicht gut ist) die Tabelle und die eigentlichen Daten vermischt werden. Oder anders gefragt: Wäre dieser Array auch in den Objekten, wenn sie NICHT in einer Tabelle angezeigt würden? Und... was passiert mit den Arrays, wenn jemand die Reihenfolge der Spalten in der Tabelle mal anders haben will....?!
 

bERt0r

Top Contributor
Das Array habe ich als gegeben betrachtet, würde ich dahinter sitzen hätte ich das auch mit einer ArrayList gemacht. Also eine ArrayList<ArrayList<Boolean/Integer/Color>>.
Und ja, so wie ich das verstanden habe, gehört dieses Array zu diesem TableModel weil es eben genau für diesen Zweck (Anzeige der fehlerhaften Zellen) erstellt wurde. Dass das int array in der Datenhaltung, also den Objekten, gespeichert wird hab ich nie gesagt. Anzunehmen wäre, dass dieses ominöse int array entweder vom Objekt selbst oder irgendeinem Validator mit einer Funktion erzeugt wird.
 
Zuletzt bearbeitet:

Pepe Rohny

Aktives Mitglied
Hi,

ich hab' auch 'nen Vorschlag:
- mach ein TableModel (Creating a Table Model) mit einer Liste (z. B. Vector) die die Daten-Objekte enthält - das TableModel enthält eine Methode namens getValueAt(int row, int col) die vom View (JTable) benutzt wird; dazu denn noch ein Custom Renderer (Using Custom Renderers) der ... aber das ist ja klar
- erweiter die Daten-Klasse um eine HashMap die Tupel bestehend aus Tabellenkoordinate und Farbe enthält; der Custom Renderer kann dann hier die notwendige Information bekommen
'is nur so 'ne Idee von mir

Pepe

P.S.
es gibt vielleicht einen besseren Listen-Datentyp als Vector dem man einen Observer (Listener) anhängen kann. In dem Fall kann sich das TableModel als Observer an der Liste anhängen und Informationen bekommen, wenn sich die Liste verändert. Das TableModel informiert dann wiederum den View (JTable)
 

Ratzer

Mitglied
Mir ist noch folgendes eingefallen. Man könnte ja in der ersten Spalte der JTable mein ganzen Objekt ablegen, indem ich dem Objekt eine toString() Methode gebe, die dann genau den Wert ausspuckt, der in der ersten Spalte verlangt wird. Im CellRenderer hätte ich dann Zugriff auf das ganze Objekt und wüsste auch, welche Zellen fehlerhaft sind. Das Problem ist nur, dass der CellRenderer ja immer dann aufgerufen wird, wenn eine Zelle gerade gezeichnet wird. Was ist, wenn der Fehler in einer Zelle ist, die noch gar nicht vorhanden ist?
 

Ratzer

Mitglied
Um das hier jetzt mal aufzulösen. Ich habe nun einfach alle meine Eigenschaften zu Objekten gemacht. Vorher waren das entweder Strings oder einfach nur Ints. Nun ist auch ein "int" ein Objekt mit der zusätzlichen Eigenschaft, dass es eine boolesche Variable enthält, die angibt, ob fehlerhafte Daten in das Objekt eingegeben wurden. Das kann ich nun sehr einfach durch den CellRenderer abfragen.
 

Marco13

Top Contributor
WER entscheidet WANN auf welcher Basis, ob die Daten falsch oder richtig sind? Ändert sich das noch, nachdem die Daten in die Tabelle gelegt wurden?
 

Ratzer

Mitglied
Vor dem Erstellen eines Objekts wird direkt abgefragt, ob fehlerhafte Daten vorhanden sind und dann kriegt eine Eigenschaft des Objekts eben ein passendes Flag (boolean), was anzeigt, dass in dieser Eigenschaft ein Fehler ist. Es ist möglich, dass man die Daten nachträglich in der Tabelle korrigieren kann.
 

Marco13

Top Contributor
OK. Die Beschreibungen waren bisher dünn und schwammig, aber bisher klingt das für mich, als wäre es günstiger, NICHT dem OBJEKT selbst solche "Eigenschaften mit Flag" zu geben.

Du hast jetzt also
Java:
class SomeClass
{
    public String getProperty0() { ... }
    public boolean isProperty0Valid() { ... }
geändert in
Java:
class SomeClass
{
    public StringWithBoolean getProperty0() { ... }

Und dann die "StringWithBoolean"-Objekte in die Table gelegt. Vielleicht wäre es günstiger, diese "StringWithBoolean"-Objekte nicht direkt im Objekt zu speichern, sondern lokal und anonym zu erstellen und in die Tabelle zu legen, sowas wie
Java:
public void addRow(final Objekt o) 
{      
    Object[] row = new Object[3];

    // Anonymes StringWithBoolean-Objekt erstellen, das die 
    // Aufrufe an das 'Objekt' weiterreicht
    row[0] = new StringWithBoolean() {
        public String getString() { return o.getEigenschaft1(); }
        public boolean getStringValid() { return o.getValid1(); }
    };
    ....
    addRow(row);
}

Ich finde, dass die Tatsache, dass das Objekt in einer Table dargestellt werden soll, keinen Einfluß auf die eigentliche Sruktur des Objektes haben sollte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Swing JPanel ueber komplette Form legen AWT, Swing, JavaFX & SWT 1
C SWT Komplette Pfadangabe im Texfeld?! AWT, Swing, JavaFX & SWT 3
J Swing JTable: Komplette Zeile aber ohne Spalten markieren AWT, Swing, JavaFX & SWT 11
K Swing JTable.setModel() verunstaltet die komplette GUI AWT, Swing, JavaFX & SWT 6
M JTable & Problem, das nicht die komplette Zeile gefärbt AWT, Swing, JavaFX & SWT 6
G JTable komplette Zeile auf deaktiv setzen AWT, Swing, JavaFX & SWT 2
G Komplette GUI reloaden AWT, Swing, JavaFX & SWT 31
U komplette JMenuBar deaktivieren? AWT, Swing, JavaFX & SWT 4
Juelin Objekte refresh AWT, Swing, JavaFX & SWT 3
N Graphics Objekte scalen mit Veränderung des Bildschirms AWT, Swing, JavaFX & SWT 19
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
Redeason Objekte in meiner GUI verschieben AWT, Swing, JavaFX & SWT 1
_user_q Objekte vom MainController in anderen Controller verwenden und andersherum (NullPointerException) AWT, Swing, JavaFX & SWT 14
_user_q JavaFX Wie kann ich alle Objekte außer eins deaktivieren (das Gleiche mit BoxBlur)? AWT, Swing, JavaFX & SWT 11
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
J Objekte von 2 GUIs zusammenfassen AWT, Swing, JavaFX & SWT 2
T Swing Objekte in Liste AWT, Swing, JavaFX & SWT 2
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
MaxG. Swing Dynamisch grafische Objekte erzeugen AWT, Swing, JavaFX & SWT 12
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
T Rectangle Transparent und darunter liegende Objekte Bedienbar AWT, Swing, JavaFX & SWT 0
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
Z Möglichkeit mit Listerners die Farbe meiner Objekte zu ändern AWT, Swing, JavaFX & SWT 15
GenerationLost Bilder an bestimmten Platz einfügen/Objekte visualisieren AWT, Swing, JavaFX & SWT 1
I Objekte aus contentPane löschen funktioniert nicht AWT, Swing, JavaFX & SWT 3
C Swing Java Objekte AWT, Swing, JavaFX & SWT 4
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
N Swing Alle Objekte anzeigen auch bei JPanel-Überlappung AWT, Swing, JavaFX & SWT 6
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
M SWT Durchlagen der SWT Objekte mit Tabulator AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
S Swing Kopie eines JPanels inkl. aller objekte darin erstellen AWT, Swing, JavaFX & SWT 5
D Swing Objekte bewegen mit MouseMotionListener AWT, Swing, JavaFX & SWT 4
P Objekte anzeigen und verschieben - wie? AWT, Swing, JavaFX & SWT 6
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
G Objekte in und aus einer JTable laden AWT, Swing, JavaFX & SWT 5
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
propra Objekte auf Zeichenfläche verschieben AWT, Swing, JavaFX & SWT 2
propra 2D-Grafik Beliebig viele Objekte auf einer Zeichenfläche zeichnen AWT, Swing, JavaFX & SWT 15
T JList und Objekte AWT, Swing, JavaFX & SWT 7
M Objekte in JPanel bewegen AWT, Swing, JavaFX & SWT 4
E Objekte zu Path2D zusammensetzen AWT, Swing, JavaFX & SWT 2
M verschieben der Objekte in JPanel nur stückchenweise möglich AWT, Swing, JavaFX & SWT 14
4 AWT bestimmte Objekte zeichnen und löschen AWT, Swing, JavaFX & SWT 8
C File-Objekte an JList übergeben und abrufen AWT, Swing, JavaFX & SWT 6
J Objekte aus Defaulttablemodel AWT, Swing, JavaFX & SWT 5
K MouseListener für Objekte auf einem Frame AWT, Swing, JavaFX & SWT 4
S Swing mit ActionListener auf Objekte einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 3
A Swing Dynamisch Objekte erzeugen AWT, Swing, JavaFX & SWT 3
M JGraph Kante ohne Objekte AWT, Swing, JavaFX & SWT 2
P Von einem Panel auf die Objekte des anderen Panels zugreifen AWT, Swing, JavaFX & SWT 3
F Swing Objekte mit Maus verschieben AWT, Swing, JavaFX & SWT 8
T Mehrere sich bewegende Objekte in einem Frame AWT, Swing, JavaFX & SWT 14
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
J SWT 4 Objekte auf einem Composite anordnen AWT, Swing, JavaFX & SWT 5
L SWT Objekte in GC? AWT, Swing, JavaFX & SWT 8
M grafische objekte erstellen und bewegen AWT, Swing, JavaFX & SWT 4
E Swing Objekte werden nicht angezeigt AWT, Swing, JavaFX & SWT 6
J Ansprechen untergeordneter Objekte AWT, Swing, JavaFX & SWT 6
C JTree Einzelne Objekte färben AWT, Swing, JavaFX & SWT 4
Airwolf89 Swing Dynamisch auf Objekte in einer GUI zugreifen AWT, Swing, JavaFX & SWT 10
S Java3D: Alle Objekte in BranchGroup löschen während Laufzeit AWT, Swing, JavaFX & SWT 3
M Objekte weitergeben AWT, Swing, JavaFX & SWT 3
1 Bubble Breaker - Objekte fallen nicht runter AWT, Swing, JavaFX & SWT 3
W Objekte auf JPanel bewegen??? AWT, Swing, JavaFX & SWT 2
F "Objekte" mit "Verbindungen" grafisch darstellen AWT, Swing, JavaFX & SWT 4
G Objekte in JComboBox? AWT, Swing, JavaFX & SWT 7
P Speichern und Auswahl gezeichneter Objekte AWT, Swing, JavaFX & SWT 7
G Graphics Objekte in AWT Container einfügen AWT, Swing, JavaFX & SWT 2
D DnD ganzer Objekte(Objekt erstellen) AWT, Swing, JavaFX & SWT 2
W 2 Objekte in eine Tabellenzelle? AWT, Swing, JavaFX & SWT 3
L Objekte in Liste oder ähnliches anzeigen AWT, Swing, JavaFX & SWT 3
S JFrame-Klasse soll ein/mehrere Objekte einer JPanel-Klasse-& AWT, Swing, JavaFX & SWT 3
O Eigene GUI Objekte entwerfen? AWT, Swing, JavaFX & SWT 3
O Eigenschaften größerer GUI-Objekte verwalten AWT, Swing, JavaFX & SWT 3
A JTable, eigenes TableModel und dessen Objekte AWT, Swing, JavaFX & SWT 4
G Canvas + Swing-Objekte AWT, Swing, JavaFX & SWT 5
G Objekte in SWT List AWT, Swing, JavaFX & SWT 3
D Schriftgrößen aller Objekte ändern AWT, Swing, JavaFX & SWT 19
X Durch DrawLine verschwindet das Fenster und die Objekte AWT, Swing, JavaFX & SWT 13
N [und täglich grüsst das.] Zeichnen -> Objekte verschwinde AWT, Swing, JavaFX & SWT 2
S JList mit DefaultListModel befüllt, wie Objekte selektieren? AWT, Swing, JavaFX & SWT 3
M grafische Objekte mit Listener versehen AWT, Swing, JavaFX & SWT 3
G JTextArea Objekte in einem Array speichern? AWT, Swing, JavaFX & SWT 3
G Aus Arraylist bestimmte Objekte wiedergegeben bekommen? AWT, Swing, JavaFX & SWT 7
M Keine Buttons oder sonstige Objekte in JFrame unter Linux AWT, Swing, JavaFX & SWT 4
L Mehrere Scrollbar objekte miteinander verbinden AWT, Swing, JavaFX & SWT 3
E Swing-Fenster als Objekte im Sinne des OO-Prgrammparadigmas AWT, Swing, JavaFX & SWT 2
B Objekte auf Fenster verschieben. Bewegliche jPanels. AWT, Swing, JavaFX & SWT 5
T Frage zu JTree: Leaf Objekte vergleichen AWT, Swing, JavaFX & SWT 3
G Einzelne Objekte neu zeichnen AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen


Oben