Dynamisches Zuweisen von Daten an eine JTable zur Laufzeit

Status
Nicht offen für weitere Antworten.

Clip

Bekanntes Mitglied
Hallo,

ich habe eine Tabelle vom Typ jTable. Die Tabelle benutzt ein eigenes TableModel.
Code:
TableSorter sorter = new TableSorter(new MyTableModel());
jTTable = new JTable(sorter) {
(Das TableModel kommt aus einem Tutorial im Netz)
Code:
import java.util.Date;

import javax.swing.table.AbstractTableModel;

	public class MyTableModel extends AbstractTableModel {

	
		String[] columnNames = {"First Name",
	            "Last Name",
	            "Day of birth", 
	            "Sport",
	            "# of Years",
	            "Vegetarian"};

		Object[][] data = {
			{"Mary", "Campione", new Date(System.currentTimeMillis()) ,"Snowboarding", new Integer(5), new Boolean(false)},
			{"Alison", "Huml", new Date(System.currentTimeMillis()) ,"Rowing", new Integer(3), new Boolean(true)},
			{"Kathy", "Walrath", new Date(System.currentTimeMillis()) ,"Knitting", new Integer(2), new Boolean(false)},
			{"Sharon", "Zakhour", new Date(System.currentTimeMillis()) ,"Speed reading", new Integer(20), new Boolean(true)},
			{"Philip", "Milne", new Date(System.currentTimeMillis()) ,"Pool", new Integer(10), new Boolean(false)}
		};
		
	    public int getColumnCount() {
	    	return columnNames.length;
	    }

	    public int getRowCount() {
	        return data.length;
	    }

	    public String getColumnName(int col) {
	      return columnNames[col];
	    }

	    public Object getValueAt(int row, int col) {
	    	return data[row][col];	    	    		    
	    	}
	    
	    
	    
	    public Class getColumnClass(int c) {
	        return getValueAt(0, c).getClass();
	    }
	    
	    
	     // Don't need to implement this method unless your table's
	     // editable.
	     
	    public boolean isCellEditable(int row, int col) {
	        //Note that the data/cell address is constant,
	        //no matter where the cell appears onscreen.
	        if (col < 3) {
	            return false;
	        } else {
	            return true;
	        }
	    }

	    
	     // Don't need to implement this method unless your table's
	     // data can change.

	    public void setValueAt(Object value, int row, int col) {    		   
	        data[row][col] = value;         	    
	        fireTableCellUpdated(row, col);
	    }

	    public String[] getColumnNames() {
			return columnNames;
		}

	    public void setColumnNames(String[] columnNames) {
			this.columnNames = columnNames;
			fireTableDataChanged();
		}

	    public Object[][] getData() {
			return data;
		}

	    public void setData(Object[][] data) {
			this.data = data;
			fireTableDataChanged();
		}
	    	    
	}

Der TableSorter kommt hier her:
java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/TableSorter.java

Das Funzt soweit ganz gut.

Nun will ich aber nicht immer (eigentlich nie) feste Daten in der Tabelle haben. Ich stelle Daten aus der DB da. Zur Laufzeit werden diese Daten geupdated. D.h. die Tabelle muss zur Laufzeit mit neuen Daten versehen werden können. Ich hatte mal eine Version Programmiert, in der ich data und columnNames mit einer Set Methode zuweisen konnte. Anschließend habe ich die Tabelle einfach neu instantiiert. Leider hat das nicht gefunzt (hat nur relativ lange Pausen gegeben und dann sah die Tabelle aus wie zuvor :( ).
Ich habe mich schon durch die Hilfe geschlagen, konnte aber kein Beispiel für die Lösung meines Problem finden.

Kurz: Wie implementiere ich am besten eine Methode, die es mir erlaubt zur Laufzweit die Daten der Tabelle möglichst performant zu ändern?

Danke!
 

Sky

Top Contributor
In deinem Modell sollten die Daten in einer List oder in einer Collection sein; das ist besser als ein Array, wenn es sich ändern soll/muss.

Zusätzlich brauchst Du eine Methode zum hinzufügen der Daten, welche deinen Datencontainer erweitert und ein Event abfeuert.
 

Clip

Bekanntes Mitglied
Danke für den Tip!

Ich habe jetzt eine Methode implementiert, welche ein ResultSet in einer JTable darstellt:
Code:
	public void drawResultSet(ResultSet data) throws SQLException {
		
		int columns = data.getMetaData().getColumnCount();
		
		for (int i = 1; i <= columns; i++){
			Vector vector = new Vector(15);		// 15 ist ein (dummer) Defaultwert. ToDo: verbessern!
			while (data.next()){
				vector.add(data.getObject(i));
			}					
			model.addColumn(data.getMetaData().getColumnName(i), vector);			
			data.first();									
		}			
	}

Das funktioniert auch. Leider geht auf diese Art mein TableCellRenderer Hops. Bzw. er denkt bei allen Daten würde es sich um Strings handeln. Ich kann anhand der Tabellenspaltennamen erkennen um was für Datentypen es sich handelt. Nur weiß ich nicht wie ich das der Tabelle mitteilen kann. Ich möchte natürlich Boolean, int und Date unterschiedlich dargestellt kriegen ;) (Diese Boolean CheckBox in einer Tabelle finde ich einfach Sexy ) :oops:

Edit:
Und ausserdem funzt der TableSorter sonst auch nur für String, was relativ dämliche Date, Integer etc. Sortierung bedeutet....
 

AlArenal

Top Contributor
Du musst in deinem Model getColumnClass(int index) anpassen. Wenn du weißt in welcher Spalte welche Daten stecken, sollte dich das nicht vor unlösbare Probleme stellen.
 

Clip

Bekanntes Mitglied
Danke!

fürs Archiv, das geht so (mit TableSorter s.o.):
Code:
	private DefaultTableModel model = new DefaultTableModel();
	TableSorter sorter = new TableSorter(model){
		@Override
		public Class getColumnClass(int column) {
			Class myClass = extractClassFromHeader(column);					
			if (myClass != null) return myClass;
			else return super.getColumnClass(column);
		}
	};

wobei extractClassFromHeader(int) eine Methode ist, zurückgibt um was für einen Typ es sich in einer Spalte handelt. Da das bei jedem anders ist, mach es keinen Sinn die hier zu posten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U dynamisches JTree erstellen AWT, Swing, JavaFX & SWT 2
D Swing Dynamisches Dialog UI AWT, Swing, JavaFX & SWT 8
B 2D-Grafik Dynamisches Erstellen von Images und deren Animation AWT, Swing, JavaFX & SWT 4
M Swing Dynamisches Layout AWT, Swing, JavaFX & SWT 10
T dynamisches Koordinatenkreuz mit scalierung AWT, Swing, JavaFX & SWT 7
C Scollpane an dynamisches GridLayout anpassen? AWT, Swing, JavaFX & SWT 3
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
N Swing Dynamisches Verhalten bei Änderung Fenstergröße AWT, Swing, JavaFX & SWT 6
trash Dynamisches Interface AWT, Swing, JavaFX & SWT 6
H LayoutManager Dynamisches Layout AWT, Swing, JavaFX & SWT 3
T Swing Dynamisches Bild AWT, Swing, JavaFX & SWT 8
T RCP-SWT dynamisches ScrolledComposite AWT, Swing, JavaFX & SWT 2
B dynamisches Spektrogramm in Java-Webanwendung AWT, Swing, JavaFX & SWT 3
G LookAndFeel Dynamisches Einlesen von LookAndFeels - NullPointerException AWT, Swing, JavaFX & SWT 4
M Dynamisches generieren und ausrichten von Komponenten AWT, Swing, JavaFX & SWT 11
T Dynamisches hinzufügen und entfernen von Bildern AWT, Swing, JavaFX & SWT 3
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
J Dynamisches füllen von GridBagLayout: Größe der Komponenten AWT, Swing, JavaFX & SWT 4
S GUI, dynamisches Wechseln von JPanels in einem JFrame AWT, Swing, JavaFX & SWT 2
L Dynamisches Erzeugen eines Button AWT, Swing, JavaFX & SWT 2
M Schwieriges Label - Font - Problem "Dynamisches Label&a AWT, Swing, JavaFX & SWT 7
C ActionListener für dynamisches Menü AWT, Swing, JavaFX & SWT 8
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
L Button Funktion zuweisen in WindowBuilder AWT, Swing, JavaFX & SWT 22
H Aus Array Container Panel an Tabbedpane zuweisen AWT, Swing, JavaFX & SWT 29
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
MaxG. JavaFX JavaFX Border zuweisen AWT, Swing, JavaFX & SWT 8
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
B JavaFX ImageView neues Bild zuweisen AWT, Swing, JavaFX & SWT 19
Fishmeaker Shortcuts ohne ALT zuweisen AWT, Swing, JavaFX & SWT 1
Augenblau JavaFX Externe Schriftart über CSS ansprechen und zuweisen AWT, Swing, JavaFX & SWT 5
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
C Swing JTextField Funktion zuweisen - Löschen von Buchstaben/Sonderzeichen AWT, Swing, JavaFX & SWT 6
S JComboBox UTF-8 Codierung zuweisen AWT, Swing, JavaFX & SWT 5
D AWT eigenem Knopf ActionListener zuweisen AWT, Swing, JavaFX & SWT 24
B Unendlich vielen JTextFields Namen zuweisen AWT, Swing, JavaFX & SWT 8
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
F Shortcut zuweisen AWT, Swing, JavaFX & SWT 3
N Button Wert zuweisen AWT, Swing, JavaFX & SWT 3
F Im BorderLayout eine feste Grösse zuweisen! AWT, Swing, JavaFX & SWT 9
O FlowLayout Button Event zuweisen? AWT, Swing, JavaFX & SWT 7
eQuest Swing Einem JFrame zur Laufzeit ein Panel zuweisen AWT, Swing, JavaFX & SWT 5
X Instanzieren und Zuweisen vom BorderLayout an Container nicht notwendig ? AWT, Swing, JavaFX & SWT 4
M AWT Hintergrundfarbe zuweisen AWT, Swing, JavaFX & SWT 6
G JCombobox PopupMenu feste größe zuweisen AWT, Swing, JavaFX & SWT 3
O Einem Button eine F-Taste zuweisen AWT, Swing, JavaFX & SWT 5
P Bei JComboBox einem Eintrag Wert zuweisen AWT, Swing, JavaFX & SWT 7
O JTable Zeile zuweisen und weiter mit dem Button AWT, Swing, JavaFX & SWT 2
L JPanel dynamisch zuweisen AWT, Swing, JavaFX & SWT 5
L Dynamische Buttons erstellt, aber wie ein Event zuweisen? AWT, Swing, JavaFX & SWT 11
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
G Listener (anonyme Klasse) jedem Element eines Array zuweisen AWT, Swing, JavaFX & SWT 5
J Der JComboBox ein Array zuweisen AWT, Swing, JavaFX & SWT 2
V Werte mehreren Checkboxes zuweisen AWT, Swing, JavaFX & SWT 3
W TreeNode einem DefaultMutableTreeNode zuweisen AWT, Swing, JavaFX & SWT 2
T JTablecolumn einen TableRenderer zuweisen AWT, Swing, JavaFX & SWT 4
S Ein Bild beim drücken eines Button zuweisen AWT, Swing, JavaFX & SWT 16
G Keys zuweisen, 1 Key für mehrer Button AWT, Swing, JavaFX & SWT 7
H JTabel - RowFilter Daten für Berechnung filtern AWT, Swing, JavaFX & SWT 6
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
W Daten von Controller zu Controller übertragen AWT, Swing, JavaFX & SWT 7
D Columns unabhängig voneinander mit Daten füllen JavaFx AWT, Swing, JavaFX & SWT 1
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
A JavaFX Daten in eine HTML-Table mit JS schreiben AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
ralfb1105 JavaFX Daten zwischen Controller "austauschen" AWT, Swing, JavaFX & SWT 65
B AWT Bot um Daten auf Website einzugeben und die Antwort zu bekommen AWT, Swing, JavaFX & SWT 2
L Daten bearbeiten ohne GUI zu blockieren - daten haltung/zurück geben AWT, Swing, JavaFX & SWT 15
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
ralfb1105 Swing Dynamischer Graph zum anzeigen Perfomance Daten AWT, Swing, JavaFX & SWT 35
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
K TreeTableView (cellFactory) - wie Daten in Spalten einfügen AWT, Swing, JavaFX & SWT 0
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
J TableView Daten werden nicht ausgegeben AWT, Swing, JavaFX & SWT 9
A Swing Wie Daten in der Form speichern? Array oder ArrayList AWT, Swing, JavaFX & SWT 2
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
T JavaFX Model Daten übergeben AWT, Swing, JavaFX & SWT 4
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
J JavaFX Tableview Daten hinzufügen aus anderer Klasse AWT, Swing, JavaFX & SWT 7
J Tableview Daten hinzufügen und aktualisieren AWT, Swing, JavaFX & SWT 5
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
S JavaFX (Best Practise) Daten zwischen Controllern austauschen AWT, Swing, JavaFX & SWT 1
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
L Daten in neuem Fenster AWT, Swing, JavaFX & SWT 2
Tort-E JavaFX Daten an WebView Komponente AWT, Swing, JavaFX & SWT 1
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
S JTable Daten aus Array AWT, Swing, JavaFX & SWT 9
M Java FX Daten an Controller übergeben AWT, Swing, JavaFX & SWT 3
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
M JavaFX Von FXML-Controllerdatei Daten zurückgeben AWT, Swing, JavaFX & SWT 6
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
B Swing JTable mit Daten - Reihen-Größe anpassen AWT, Swing, JavaFX & SWT 0
D Applet GWT speichert Daten nicht in Datenbank AWT, Swing, JavaFX & SWT 2
S SWT In Listen den Einträgen Daten zuordnen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben