Object mit JTable verknüpfen

d3rbastl3r

Bekanntes Mitglied
Hallo,
hat einer eine idee wie ich ein Objekt an eine Reihe in der JTable binden kann?

Ich zeige in der tabelle mein ModelTree an, hierbei habe ich in meiner model eine methode die mir aus jedem Element einen vector erzeugt so dass ich diesen dann in die Tabelle laden kann.

Nun möchte ich dass bei einem Klick auf eine Reihe der verweis zu dem eigentlichem Objekt zurückgegeben wird damit ich mit den Daten weiterarbeiten kann.

Momentan habe ich das so gelöst (habe irgendwo hier gefunden) dass ich einer Zelle das Objekt übergebe und die MaxWidth der Spalte auf 0 setze. So kriege ich natürlich das Objekt wenn ich den inhalt der Zelle abfrage, jedoch ist die spalte trot width(0) sichtbar.

Gibt es da eine Andere möglichkeit dass eine Reihe auf ein bestimmtes Objekt verweist?
 

r.w.

Bekanntes Mitglied
Ich weiss zwar nicht ob das in Deinem Fall die ideale bzw. sauberste Lösung ist
und hab es selbst jetzt auch nicht ausprobiert.

Aber theoretisch könnte man das Objekt in der letzten Spalte
des TableModel speichern und in getColumnCount() die Anzahl Spalten -1 zurück liefern.

Java:
public int getColumnCount() { return columnNames.length - 1; }

Dann müsstest Du das TabelModel noch um eine Funktion erweitern, mit der Du auf das Objekt zugreifen kannst.
 

Michael...

Top Contributor
Wie schaut den so ein Element aus?
Du könntest anstelle die Bestandteile der Elemente in einem Vector abzuspeichern, einfach eine Liste (z.B ArrayList) mit den relevanten Elementen im TableModel vorhalten. Methoden wie getRowCount, getColumnCount, get/setValueAt entsprechend überschreiben. Zusätzlich noch eine Methode ala public Element getElementAt(int row) bereitstellen, welche Dir über die Liste immer das passende Element zur Zeile liefert.
 
G

Gast2

Gast
Ich habe es damals so gemacht: (gibt aber sicherlich ne elegantere lösung...)

Java:
        ruleTableModel = new javax.swing.table.DefaultTableModel(data,header) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.Boolean.class, Rule.class // in der 3. Spalte befindet sich das RuleObjekt
            };

            boolean[] canEdit = new boolean [] {
                false, true, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        };

Die Spalte ausgeblendet habe ich dann so:

Java:
        ruleTable.getColumnModel().getColumn(2).setMinWidth(0); // Spalte ausblenden
        ruleTable.getColumnModel().getColumn(2).setMaxWidth(0);

Mich würde aber auch interessieren ob es dafür eine schönere Lösung gibt.
 

d3rbastl3r

Bekanntes Mitglied
Danke erstmal für die antworten :)

Ich weiss zwar nicht ob das in Deinem Fall die ideale bzw. sauberste Lösung ist
und hab es selbst jetzt auch nicht ausprobiert.

Aber theoretisch könnte man das Objekt in der letzten Spalte
des TableModel speichern und in getColumnCount() die Anzahl Spalten -1 zurück liefern.

Java:
public int getColumnCount() { return columnNames.length - 1; }

Dann müsstest Du das TabelModel noch um eine Funktion erweitern, mit der Du auf das Objekt zugreifen kannst.

So geht es leider nicht, versuche ich hier dann auf eine zelle der spalte "columnNames.length" zuzugreifen, existiert diese nicht, die aber quasi mein objekt darstellen müsste.

@ EikeB, so habe ich das momentan auch gelöst, ist zwar unschön, aber die einzige lösung die ich gefunden habe.

@ Michael, ich weis nicht genau was du meinst. Also meine Datenstruktur ist etwas komplexer aufgebaut, und das ganze auch noch in einen BinärenBaum verpackt. Mit der Methode getDataVector kann ich dann quasi genau festlegen was in der tabelle angezeigt werden soll.
 

Michael...

Top Contributor
So wie ich das verstanden habe "entspricht" eine Zeile einem bestimmten Objekt und in den Zellen der Zeile werden diverse Attribute dieses Objekts dargestellt.
Dann könnte man das so (Klasse ObjectModel) umsetzen:
Java:
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;

public class ObjectModelDemo extends JFrame {
	private JTable table;
	private ObjectModel model;
	private JLabel label;
	
	public ObjectModelDemo() {
		List<MyElement> list = new ArrayList<MyElement>();
		String[] name = {"Heinz", "Otto", "Rosi", "Susi"};
		String[] value = {"Nord", "Süd", "West", "Ost"};
		for (int i=0; i<name.length; i++)
			list.add(new MyElement(name[i], value[i], null));
		model = new ObjectModel(list);
		table = new JTable(model);
		this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
		this.getContentPane().add(label = new JLabel("Select a row"), BorderLayout.SOUTH);
		
		table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				if(!e.getValueIsAdjusting()) {
					int row = table.getSelectedRow();
					if (row >= 0)
						label.setText(model.getElementAt(row).toString());
					else
						label.setText("");
				}
			}
		});
	}
	
	class ObjectModel extends DefaultTableModel {
		private List<MyElement> objList;
		private String[] colNames = {"Name", "Wert1", "Wert2"};
		
		public ObjectModel(List<MyElement> list) {
			objList = list;
		}
		
		public int getRowCount() {
			if (objList==null)
				return 0;
			return objList.size();
		}
		
		public int getColumnCount() {
			return 3;
		}
		
		public String getColumnName(int column) {
			if (column>=colNames.length || column<0)
				return null;
			return colNames[column];
		}
		
		public MyElement getElementAt(int row) {
			return objList.get(row);
		}
		
		public Object getValueAt(int row, int column) {
			MyElement elem = objList.get(row);
			switch(column) {
			case 0:return elem.getName();
			case 1:return elem.getValue1();
			case 2:return elem.getValue2();
			}
			return null;
		}
		
		public void setValueAt(Object o, int row, int column) {
			MyElement elem = objList.get(row);
			switch(column) {
			case 0: elem.setName(String.valueOf(o));break;
			case 1: elem.setValue1(String.valueOf(o));break;
			case 2: elem.setValue2(String.valueOf(o));break;
			}
		}
	}
	
	class MyElement {
		private String name, value1, value2;
		
		public MyElement(String name, String value1, String value2) {
			this.name = name;
			this.value1 = value1;
			this.value2 = value2;
		}
		
		public void setName(String name) {
			this.name = name;
		}
		
		public void setValue1(String value) {
			this.value1 = value;
		}
		
		public void setValue2(String value) {
			this.value2 = value;
		}
		
		public String getName() {return name;}
		
		public String getValue1() {return value1;}
		
		public String getValue2() {return value2;}
		
		public String toString() {
			return getClass().getSimpleName() + "@" + hashCode() + " [" + getName() + ", " + getValue1() + ", " + getValue2() + "]"; 
		}
	}
	
	public static void main(String[] args) {
		JFrame frame = new ObjectModelDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 

r.w.

Bekanntes Mitglied
d3rbastl3r hat gesagt.:
r.w. hat gesagt.:
Dann müsstest Du das TabelModel noch um eine Funktion erweitern, mit der Du auf das Objekt zugreifen kannst.
So geht es leider nicht, versuche ich hier dann auf eine zelle der spalte "columnNames.length" zuzugreifen, existiert diese nicht, die aber quasi mein objekt darstellen müsste.
Wie ich schon erwähnt hab, müsstest Du dann im TableModel eine eigene Funktion implementieren,
die dort intern auf die Spalte zugreift. Und zwar direkt und nicht über die Funktion ".getValueAt()".
Denn diese wird ja ".getColumnCount()" verwenden und somit die letzte Spalte nicht finden.

Ich hoffe, ich hab mich verständlich ausgedrückt. Bin grad etwas in Zeitnot. ;-)
 

d3rbastl3r

Bekanntes Mitglied
Boahh, eigentlich gibt es einen gaaaanz einfachen weg der verknüpfung xD der mir jedoch irgendwie erst eingefallen ist als ich überlegt habe wie ich die objekte nun mit JComboBox verknüpfen soll.

Im grunde hat jede zeile eine ID
Ich würde jetzt einfach in der ViewKlasse einen Vector mit referenzen auf die eigentliche Objekte anlegen.
Diese natürlich im Vector genau so anordnen wie in der Tabelle oder JComboBox.
Bei einem Event krigt man die nummer der Zeile raus und durch diesen index kann man dann auf die Referenz im Vector zugreifen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Swing Object aus JTable AWT, Swing, JavaFX & SWT 1
L JTable SelectRowByValue(Object Value)? AWT, Swing, JavaFX & SWT 3
K TableView: 'Komplexes' Object AWT, Swing, JavaFX & SWT 11
S 3D-Grafik Marker zu aus Screen anvisiertem Object AWT, Swing, JavaFX & SWT 1
Paul15 ActionListen auf Object in main AWT, Swing, JavaFX & SWT 7
S 3D Object Viewer AWT, Swing, JavaFX & SWT 13
R Graphics-Object speichern AWT, Swing, JavaFX & SWT 4
J 2D-Grafik Graphics2D object in ein anderes Zeichnen AWT, Swing, JavaFX & SWT 7
M Object[][] in double[][] casten AWT, Swing, JavaFX & SWT 6
A Swing Drag and Drop TreeNode User Object AWT, Swing, JavaFX & SWT 3
D JTree - Zugriff auf Nodes mit Object AWT, Swing, JavaFX & SWT 6
N JComboBox mit Custom Object AWT, Swing, JavaFX & SWT 2
D JRadioButton Object AWT, Swing, JavaFX & SWT 2
F Serialisiertes Object geht nicht zu Inizialisieren AWT, Swing, JavaFX & SWT 7
F invokeLater() vs synchronized(Object) AWT, Swing, JavaFX & SWT 5
G Image Object speichern oder in ein BufferedImage umwandeln AWT, Swing, JavaFX & SWT 2
P Wie das Component Object des Hauptfensters ermitteln? AWT, Swing, JavaFX & SWT 4
J Nochmal Drag&Drop, ABER: Object verschieben AWT, Swing, JavaFX & SWT 2
S Object auf Knopfdruck dem Frame hinzufügen AWT, Swing, JavaFX & SWT 2
F polygon object "stirbt" vor Ausführung in paint() AWT, Swing, JavaFX & SWT 4
S Object in Color umwandeln AWT, Swing, JavaFX & SWT 2
M drag and drop a object in swt AWT, Swing, JavaFX & SWT 2
M JTree Elemete zeigen nach 2. Mausklick Object an. Warum? AWT, Swing, JavaFX & SWT 2
M Warum wird Graphics-Object zerstört? AWT, Swing, JavaFX & SWT 8
T object in tabelle AWT, Swing, JavaFX & SWT 2
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben