Objekte in und aus einer JTable laden

goodcat

Aktives Mitglied
Hi,

ich habe ein paar Fragen bzgl. einer JTable in die ich Objekte reinpacken und auch wieder rausziehen kann.

Ich habe mir in den FAQs mal die Darstellung der Daten in einer JTable durchgelesen aber habe Probleme mit den Objekten die ich dort reinpacken möchte.

Ich habe z.B. ein Customer Objekt mit Vorname, Nachname, Firma etc. die ich aus einer MySQL Datenbank lade (via Hibernate). Diese ganzen Customer Objekte liegen in einer ArrayList.
Momentan habe ich eine Methode die diese Daten in ein Vector packt und dann in ein DefaultTableModel lädt, da ich nicht alle Eigenschaften dieses Customer Objekts haben möchte sondern nur bestimmte.

Jetzt würde ich gerne in diese JTable richtige Objekte packen (aber nur bestimmte Eigenschaften in der JTable anzeigen) und anschließend das Objekt aus einer selektierten Zeile zu bekommen. Nur habe ich nicht nur Customer sondern viele andere Objekte die in andere JTables geladen werden sollen, natürlich mit unterschiedlichen Spaltennamen (in der Customer JTable werden natürlich auch nur Customer angezeigt und keine ContactPerson). Dafür möchte ich gerne nur eine TableCellRenderer Klasse benutzen (wenn das nicht funktionieren sollte ist das nicht weiter schlimm). Ich habe das ganze mal mit JComboBoxen gemacht und mit instanceof zwischen den unterschiedlichen Objekten unterscheiden zu können.

Hier erstmal meine Klassen:
Java:
public class JTableCellRenderer extends JLabel implements TableCellRenderer{

	private static final long serialVersionUID = -5317742370341211975L;

	
	public JTableCellRenderer() {
		setOpaque( true );
	}

	
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

        
        if( value instanceof Customer ) {
        	Customer customer = (Customer) value;
        	setText( customer.getCompany() );
        	setText( customer.getLastName() );
...
        }
        
        if( value instanceof ContactPerson ) {
        	ContactPerson contactPerson = (ContactPerson) value;
        	setText( contactPerson.getFirstName() );
        	setText( contactPerson.getLastName() );
...
        }

        return this;
    }
	
	    
}

Meine TestKlasse:
Java:
public class TestCustomerList {

	private JTableCellRenderer cRenderer = new JTableCellRenderer();
	
	private JFrame frame;
	private JTable table;
	private JPanel panel;
	private JButton btnGetselectedrow;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TestCustomerList window = new TestCustomerList();
					window.frame.setVisible(true);					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public TestCustomerList() {
		initialize();
		
		CustomerList customerList = new CustomerList();
		table.setModel( customerList.getCustomerTableModel() ); // <- Hier wird momentan noch ein DefaultTableModel in die JTable geladen.

	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 808, 676);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JScrollPane scrollPane = new JScrollPane();
		frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
		
		table = new JTable();
		table.setDefaultRenderer(Object.class, cRenderer); // ??
		table.setFillsViewportHeight(true);
		scrollPane.setViewportView(table);
		
		panel = new JPanel();
		scrollPane.setRowHeaderView(panel);
		
		btnGetselectedrow = new JButton("getSelectedRow");
		btnGetselectedrow.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

			}
		});
		panel.add(btnGetselectedrow);
	}

}

Probleme habe ich mit folgenden Punkten:
1. Wie bzw. wo sollte oder kann ich die Namen der Spalten für die Customer oder die ContactPerson Tabelle vergeben. Ich nehme mal an in der Renderer Klasse?
2. Wie kann ich der JTable meine Daten übergeben. Mit dem DefaultTableModel klappt das glaube ich nicht mehr...
3. Und wie kann ich dann auf das Objekt zugreifen ... getSelectedRow der JTable gibt mit nur ein int zurück.

Stehe grad ziemlich auf dem Schlauch die Daten in ein Model zu packen und korrekt anzeigen zu lassen.

Vielen Dank,
goodcat
 
Zuletzt bearbeitet:

goodcat

Aktives Mitglied
Ahh jetzt hats klick gemacht!!

Ich habe es geschafft ein funktionierendes Model zu schreiben:

Java:
public class CustomerTableModel extends AbstractTableModel {

	private static final long serialVersionUID = 3363249837189763026L;
	private List<Customer> customerList;
    
	public CustomerTableModel( List<Customer> customerList ){
		this.customerList = customerList;
	}
	   
	
	public int getColumnCount() {
		return 8;
	}
	   
	public int getRowCount() {
		return customerList.size();
	}
	   
	public String getColumnName(int column) {
		return String.valueOf( column );
	}
	
	public Object getValueAt(int rowIndex, int columnIndex) {
		System.out.println(rowIndex + " " + columnIndex);
		Customer customer = (Customer) customerList.get(rowIndex);
		switch (columnIndex) {
			case 0:
				return customer.getCustomerID();
			case 1:
				return customer.getCompany();
			case 2:
				return customer.getLastName();				
			case 3:
				return customer.getStreet();
			case 4:
				return customer.getZipCode();
			case 5:
				return customer.getCity();
			case 6:
				return customer.getTelephone();
			case 7:
				return customer.getEmail();
			
			default:
				return null;
		}
	}

Die JTable mit Daten füllen klappt schonmal. Der RowSorter für die JTable scheint auch zu funktionieren.
Nur was muss ich machen ob nun an das richtige Customer Object aus der selektierten Zeile zu kommen?

Achja und einen kleinen Tipp bräuchte ich wie bzw. wo ich die Spaltennamen vergeben kann.

Danke!
 

burnson

Mitglied
Für die Spaltennamen kannst du
Code:
getColumnName
deines TableModels so überschreiben, dass für den übergebenen Spaltenindex der von dir gewünschte Name zurückgegeben wird.

Um an die Objekte zu kommen würde ich das Model einfach um eine entsprechende Methode erweitern. Zum Beispiel so:

Java:
public Customer getCustomer(int rowIndex) {
  return customerList.get(rowIndex);
}
 

goodcat

Aktives Mitglied
Ahh ok doch so einfach.
Hab verzweifelt nach einem setter gesucht.

Soweit funktioniert alles. Nur gibt es Probleme in Verbindung mit dem TableRowSorter.

Ich benutze folgenden Code um ein Objekt aus einer selektierten Zeile zu bekommen.

TestKlasse:
Java:
CustomerTableModel ctm = (CustomerTableModel) table.getRowSorter().getModel();
Customer customer = ctm.getSelectedRow(table.getSelectedRow());
System.out.println( customer.getFirstName() + " " + customer.getLastName() );

CustomerTableModel.java
Java:
public Customer getSelectedRow( int rowIndex ) {
	return customerList.get( rowIndex ); 
}

Das Problem besteht darin, wenn ich die TestKlasse starte, eine Zeile markiere und das Objekt abfrage klappt es, nur wenn ich die Sortierung ändere (also auf eine Spalte klicke) dann bekomme ich das falsche Objekt (ich bekomme das Objekt was vorher auf dem Index war).
 

burnson

Mitglied
JTable stellt Methoden zur Verfügung um den Index in beide Richtungen umzuwandeln:

Java:
int convertRowIndexToModel(int viewRowIndex)
int convertRowIndexToView(int modelRowIndex)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
propra 2D-Grafik Beliebig viele Objekte auf einer Zeichenfläche zeichnen AWT, Swing, JavaFX & SWT 15
S Swing mit ActionListener auf Objekte einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 3
Airwolf89 Swing Dynamisch auf Objekte in einer GUI zugreifen AWT, Swing, JavaFX & SWT 10
S JFrame-Klasse soll ein/mehrere Objekte einer JPanel-Klasse-& AWT, Swing, JavaFX & SWT 3
M Grafische Objekte beliebig auf einer Oberfläche verschieben AWT, Swing, JavaFX & SWT 3
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
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
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
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
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
propra Objekte auf Zeichenfläche verschieben AWT, Swing, JavaFX & SWT 2
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
R komplette Objekte in JTable einfügen AWT, Swing, JavaFX & SWT 18
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
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
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
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
T Objekte in JList AWT, Swing, JavaFX & SWT 4
H JApplet fehler objekte unsichtbar. AWT, Swing, JavaFX & SWT 2
M Image-Objekte in JEditorPane anzeigen? AWT, Swing, JavaFX & SWT 3
F bewegte objekte mit awt AWT, Swing, JavaFX & SWT 2
B Zwei "gleiche" Objekte auf einem Frame platzieren AWT, Swing, JavaFX & SWT 2
F Objekte beliebigen Typs zu JComboBox hinzufügen AWT, Swing, JavaFX & SWT 7
J Anordung der Objekte in der Oberfläche? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben