fire methoden auch bei defaultTableModel?

Status
Nicht offen für weitere Antworten.

Benny85

Mitglied
Hallo alle zusammen,

ich habe ein JTable, welches mit Daten aus einer DB gefüllt wird.
Um die Daten in den JTable hineinzubekommen, benutze ich das defaultTableModel, soll heissen kein besonders angepasstes TableModel. Codetechnisches sieht das so aus :

hier wird der JTable initialisiert (eigener Renderer, damit Buttons im JTable dargestellt werden können)
Code:
JTable userlist = new JTable(querysize,8)
		{
			public TableCellRenderer getCellRenderer(int row, int column) {
				TableColumn tableColumn = getColumnModel().getColumn(column);
				TableCellRenderer renderer = tableColumn.getCellRenderer();
				if (renderer == null) {
					Class c = getColumnClass(column);
					if( c.equals(Object.class) )
					{
						Object o = getValueAt(row,column);
						if( o != null )
							c = getValueAt(row,column).getClass();
					}
					renderer = getDefaultRenderer(c);
				}
				return renderer;
			}
			
			public TableCellEditor getCellEditor(int row, int column) {
				TableColumn tableColumn = getColumnModel().getColumn(column);
				TableCellEditor editor = tableColumn.getCellEditor();
				if (editor == null) {
					Class c = getColumnClass(column);
					if( c.equals(Object.class) )
					{
						Object o = getValueAt(row,column);
						if( o != null )
							c = getValueAt(row,column).getClass();
					}
					editor = getDefaultEditor(c);
				}
				return editor;
			}
			
		};
...und hier wird das JTable gefüllt:
Code:
ResultSet userlistrset = userstmt.executeQuery(query);
			int row = 0;
			
			while (userlistrset.next()) {	
				int column = 0;
				for (int i=1; i<=6; i++) {
					userlist.setValueAt(userlistrset.getString(i), row, column);
					column++;
					
				}

Nach bestimmten Benutzeraktionen sollen die Daten des JTables neu aus der Datenbank gelesen werden. Hierzu benutzt man eine der Firemethoden, richtig? Ich habe von diesen Firemethoden jedoch immer nur im Zusammenhang mit eigenen tableModels gelesen. Ist das aufrufen dieser Methoden mit dem defaulTableModel nicht möglich? Wenn doch: wie?

Danke schonmal!
Benny
 

Wildcard

Top Contributor
Du brauchst gar nichts aufzurufen. Das funktioniert automatisch wenn du das DefaultTableModel richtig benutzt.
Änder die Daten im Model und nicht in der Table, dann passt das.
 

Benny85

Mitglied
hmm, sehr wahrscheinlich nutze ich das defaultTableModel dann nicht richtig ;-)
Meine Aussage rührt daher, dass es hiess, man nutzt automatisch das defaultTableModel, wenn man nichts anderes nutzt ;-)

Der entsprechende relevante Code (inkl. Datenbankconnections der vollständigkeit halber) sieht folgendermassen aus ("querysize" ist ein integerwert):
Was muss ich ändern, damit die Daten in der GUI aktualisiert werden?
Das Vorgehen sieht folgendermassen aus: User lässt sich Tabelle anzeigen -> User ändert oder löscht dann Datensätze in der DB (funktioniert bereits) -> Tabelleninhalt wird aktualisiert
Code:
JTable userlist = new JTable(querysize,8)
		{
			public TableCellRenderer getCellRenderer(int row, int column) {
				TableColumn tableColumn = getColumnModel().getColumn(column);
				TableCellRenderer renderer = tableColumn.getCellRenderer();
				if (renderer == null) {
					Class c = getColumnClass(column);
					if( c.equals(Object.class) )
					{
						Object o = getValueAt(row,column);
						if( o != null )
							c = getValueAt(row,column).getClass();
					}
					renderer = getDefaultRenderer(c);
				}
				return renderer;
			}
			
			public TableCellEditor getCellEditor(int row, int column) {
				TableColumn tableColumn = getColumnModel().getColumn(column);
				TableCellEditor editor = tableColumn.getCellEditor();
				if (editor == null) {
					Class c = getColumnClass(column);
					if( c.equals(Object.class) )
					{
						Object o = getValueAt(row,column);
						if( o != null )
							c = getValueAt(row,column).getClass();
					}
					editor = getDefaultEditor(c);
				}
				return editor;
			}
			
		};
		/////////
		try {
			Class.forName( "com.mysql.jdbc.Driver" );
			Connection cn = DriverManager.getConnection( "jdbc:mysql://193.196.183.10:3306/DoKuVe","root","luftkuchen" );
			Statement userstmt = cn.createStatement();
			String query = "SELECT t.BenutzerID,s.name,t.Benutzername,t.Passwort,t.StudiengangsLeiter,t.Administrator FROM tblBenutzer t, tblStudiengang s WHERE t.StudiengangID = s.StudiengangID";
			ResultSet userlistrset = userstmt.executeQuery(query);
			int row = 0;
			
			while (userlistrset.next()) {	
				int column = 0;
				for (int i=1; i<=6; i++) {
					userlist.setValueAt(userlistrset.getString(i), row, column);
					column++;
					
				}
				addUserButton changeButton = new addUserButton();
				changeButton.setIcon(editicon);
//				rowButton.setText("ändern");
				changeButton.setActionCommand("changeuser" + userlistrset.getString(3));
				changeButton.addActionListener(changeButton);
				userlist.setValueAt( changeButton, row, 6 );
				
				addUserButton deleteButton = new addUserButton();
				deleteButton.setIcon(deleteicon);
				deleteButton.setActionCommand("deleteuser" + userlistrset.getString(3));
				deleteButton.addActionListener(deleteButton);
				userlist.setValueAt(deleteButton, row, 7);
				
				
				row++;	
			}
		userstmt.close();
		cn.close();
		}
		catch (Exception e) {
			System.out.println(e.getMessage());
			System.out.println("Ohoh, im Catchblock gelandet....");
		}
		////////
		TableColumn column0 = userlist.getColumnModel().getColumn(0);
		column0.setHeaderValue("Benutzer ID");
		userlist.getColumnModel().getColumn(0).setPreferredWidth(30);
		TableColumn column1 = userlist.getColumnModel().getColumn(1);
		column1.setHeaderValue("Studiengang");
		TableColumn column2 = userlist.getColumnModel().getColumn(2);
		column2.setHeaderValue("Benutzername");
		column2.setPreferredWidth(30);
		TableColumn column3 = userlist.getColumnModel().getColumn(3);
		column3.setHeaderValue("Passwort");
		TableColumn column4 = userlist.getColumnModel().getColumn(4);
		column4.setPreferredWidth(30);
		column4.setHeaderValue("Administrator?");
		TableColumn column5 = userlist.getColumnModel().getColumn(5);
		column5.setHeaderValue("Studiengangsleiter?");
		column5.setPreferredWidth(30);
		TableColumn column6 = userlist.getColumnModel().getColumn(6);
		column6.setHeaderValue("ändern");
		column6.setPreferredWidth(10);
		TableColumn column7 = userlist.getColumnModel().getColumn(7);
		column7.setHeaderValue("löschen");
		column7.setPreferredWidth(10);
		
		userlist.setDefaultRenderer( JComponent.class, new JComponentCellRenderer() );
		userlist.setDefaultEditor( JComponent.class, new JComponentCellEditor() );
	  
		benutzeradminpanel.add(new JScrollPane(userlist), BorderLayout.CENTER );

Danke für die Hilfe!
Benny
 

André Uhres

Top Contributor
Benny85 hat gesagt.:
..Das Vorgehen sieht folgendermassen aus: User lässt sich Tabelle anzeigen
-> User ändert oder löscht dann Datensätze in der DB (funktioniert bereits)
-> Tabelleninhalt wird aktualisiert..
Die Änderung ist ja eh sofort sichtbar, wenn sie in der Tabelle gemacht wird.
Löschen kannst du mit:
Code:
((DefaultTableModel)userlist.getModel()).removeRow(row);
 

Benny85

Mitglied
Hallo André,

vielen Dank für deinen Vorschlag!
Ich denke, dass das Problem bei mir ist, dass ich den JTable rein zum anzeigen der Daten benutze, d.h. wenn ich etwas löschen möchte, setze ich direkt einen SQL-Befehl ab, der den Datensatz in der Datenbank löscht, gleich verfahre ich, wenn ich Daten ändern möchte.
D.h. ich brauche im Endeffekt einfach einen Befehl, mit dem ich den JTable aktualisieren/neu laden lassen kann.
Wahrscheinlich hätte ich es einfacher gehabt, wenn ich die Daten erst im JTable und dann anschliessend in der DB hätte ändern lassen...aber naja, hab ich halt nicht gemacht und es wäre mir natürlich am liebsten, wenn ich meinen Code jetzt nicht mehr grundlegend umschreiben müsste sondern einen Workaround finden würde...

Analog zu deinem Vorschlag habe ich gerade probiert, über userlist.getModel().fire... eine entsprechende Methode aufzurufen (unter zuhilfename der vorschlagsliste von eclipse)... geht leider nicht. Und userlist direkt hat nur die methode firePropertyChange() implementiert...

Viele Grüsse, Benny
 

André Uhres

Top Contributor
Mach die Tabelle leer:
Code:
userlist.setModel(new DefaultTableModel(querysize,8));
und füll sie dann wieder auf.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U was bewirkt die methode fill und unterschied zu anderen fill Methoden in 2dgraphics? (Java)? AWT, Swing, JavaFX & SWT 6
G JavaFX Verständnisfrage mit parametrisierten Methoden und FXML AWT, Swing, JavaFX & SWT 21
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16
I JAVAFX - CSS - automatische Property- und Methoden-Vorlagen in Eclipse AWT, Swing, JavaFX & SWT 17
P X extends TreeView - eigene Methoden AWT, Swing, JavaFX & SWT 5
D JavaFX Java Methoden mit JavaFX Methode kommunizieren lassen? AWT, Swing, JavaFX & SWT 3
J JavaFX Mehrfache Benutzung von Methoden einer Klasse AWT, Swing, JavaFX & SWT 17
M ActionListener und mathematische Methoden AWT, Swing, JavaFX & SWT 13
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
M Swing Vorgehen beim Aufruf der Klassen/Methoden AWT, Swing, JavaFX & SWT 7
L Rekursive Methoden -> Error: StackOverFlow AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
K Stundenplan, Kalender Methoden AWT, Swing, JavaFX & SWT 2
P Actionlistener - 3 klassen - kompliziert - auf methoden zugreifen AWT, Swing, JavaFX & SWT 3
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
B Zu welchem Zeitpunkt sind Methoden anwendbar AWT, Swing, JavaFX & SWT 3
F JPanel mit zwei Methoden her beschreiben. AWT, Swing, JavaFX & SWT 8
B Eigene Methoden in TABs einfügen AWT, Swing, JavaFX & SWT 8
F Initialisieren von Fenstern über Methoden AWT, Swing, JavaFX & SWT 3
R eigene Methoden für Buttons? AWT, Swing, JavaFX & SWT 11
M Alle Frame Methoden AWT, Swing, JavaFX & SWT 2
B Bedeutung der Methoden von Klasse WindowListener AWT, Swing, JavaFX & SWT 4
J eclipse/Visual Editor: Auf Felder/Methoden vom Hauptframe zugreifen AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
G Großbuchstaben abfragen mit Keycode Methoden AWT, Swing, JavaFX & SWT 5
A TreeNode abgeleitet -> Wie komme ich an meine Methoden? AWT, Swing, JavaFX & SWT 2
S Methoden implementieren AWT, Swing, JavaFX & SWT 7
P add Methoden bei Swing AWT, Swing, JavaFX & SWT 2
M Zugriff auf Methoden aus einem ActionListener AWT, Swing, JavaFX & SWT 2
G Probleme mit static Methoden in JFrame/JDialog AWT, Swing, JavaFX & SWT 7
G jcombo-box getters und setters methoden AWT, Swing, JavaFX & SWT 5
G Grafik auf mehrere Methoden/Klassen zerlegen AWT, Swing, JavaFX & SWT 2
J JTree/TreeModel add/delete Methoden AWT, Swing, JavaFX & SWT 2
S Methoden return wert? AWT, Swing, JavaFX & SWT 7
N JDK1.4- Überladen d. Methoden getValue setValue von JSpinner AWT, Swing, JavaFX & SWT 2
J instanceof von einem Interface und aufrufen der Methoden AWT, Swing, JavaFX & SWT 5
G Grafik auf JComponent ohne Überschreiben von Paint-Methoden AWT, Swing, JavaFX & SWT 4
G ActionListener und Methoden-Aufruf aus anderen Klassen AWT, Swing, JavaFX & SWT 3
B ActionListener und Statische Methoden AWT, Swing, JavaFX & SWT 3
D Methoden zentral in einer Datei ablegen AWT, Swing, JavaFX & SWT 2
G zeitkontrollierte Methoden ??? AWT, Swing, JavaFX & SWT 6
M methoden.... AWT, Swing, JavaFX & SWT 2
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
J Spielfelder auch über die Tastatureingabe (1…9) ansteuern (Tic Tac Toe) AWT, Swing, JavaFX & SWT 2
MoxxiManagarm JavaFX Auch ich versuche mit JavaFX warm zu werden AWT, Swing, JavaFX & SWT 9
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
I Swing JMenuBar auch unten am JFrame? AWT, Swing, JavaFX & SWT 2
M JavaFX - Bild in Jar einbinden, sodass es auch außerhalb der IDE geladen wird. AWT, Swing, JavaFX & SWT 2
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
B Event Handling MouseListener Behält seine Variablen, auch wenn ich ein neus Objekt erstelle AWT, Swing, JavaFX & SWT 2
B Event Handling Mausbewegung auch außerhalb eines JFrames registrieren AWT, Swing, JavaFX & SWT 2
A LayoutManager Statusleiste auch nach Verkleinerung des Fensters anzeigen AWT, Swing, JavaFX & SWT 1
N Swing Alle Objekte anzeigen auch bei JPanel-Überlappung AWT, Swing, JavaFX & SWT 6
S g.setStroke verändert auch Buttonrahmen AWT, Swing, JavaFX & SWT 2
B Play Button auch als Stop Button benutzen, MP3 Player AWT, Swing, JavaFX & SWT 7
P Swing In JTable Header auch an der linken Seite AWT, Swing, JavaFX & SWT 2
GUI-Programmer LayoutManager NullLayout - Ist es auch in diesem Fall schlecht? AWT, Swing, JavaFX & SWT 3
T Rectangle Namen geben? Alternativen auch gerne gesehen. AWT, Swing, JavaFX & SWT 2
T jPanels im jFrame bewegen - Auch ohne Textfield? AWT, Swing, JavaFX & SWT 4
A Defaults auch für SWT AWT, Swing, JavaFX & SWT 7
JuliaOne Komponenten innerhalb eine JScrollpane werden auch ausserhalb davon gezeichnet! AWT, Swing, JavaFX & SWT 7
H GridBagLayout spinnt beim vergrößern des Fensters als auch beim Maximieren AWT, Swing, JavaFX & SWT 4
Private Void LayoutManager Cardwechsel im CardLayout auch von Card aus? AWT, Swing, JavaFX & SWT 6
Luk10 repaint() auch in anderen Klassen! AWT, Swing, JavaFX & SWT 6
Spin Auch JTable - checkboxes AWT, Swing, JavaFX & SWT 8
R Swing Warum wird der Inhalt auch Transparent? AWT, Swing, JavaFX & SWT 8
? Tabelle formatieren - auch ohne CellRenderer? AWT, Swing, JavaFX & SWT 6
S Tabelle soll sich auch in der Höhe resizen? AWT, Swing, JavaFX & SWT 4
G fireTableDataChanged() geht das auch ohne vector? AWT, Swing, JavaFX & SWT 13
C JTextField auch für zahlenwerte? AWT, Swing, JavaFX & SWT 5
R Frage zu Listfeld oder jTable, auch andere Fragen AWT, Swing, JavaFX & SWT 5
T Auf Fenster innerhalb der Anwendung zugreifen-auch elegant? AWT, Swing, JavaFX & SWT 2
F gibt etwas wie frames in html auch in java? AWT, Swing, JavaFX & SWT 19
M kann man auch eigene look and feels machen? AWT, Swing, JavaFX & SWT 2
M kann man in ein Jtable auch bilder machen? AWT, Swing, JavaFX & SWT 15
K insertHTMLTextAction auch mit Attributen? AWT, Swing, JavaFX & SWT 3
M JFileChooser und multiple Selektierung auch für Verz? AWT, Swing, JavaFX & SWT 2
Z FileChooer auch mit SWT benutzen? AWT, Swing, JavaFX & SWT 2
P Scrollbar/Pane auch mit negativen x,y - Werten AWT, Swing, JavaFX & SWT 2
M auch JScrollPane aber mit Zoomen, wie wird der View gesetzt AWT, Swing, JavaFX & SWT 2
G auch mit rechter Maustaste in einer Tabelle markieren? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben