Swing XML Datei in JTable darstellen + verändern

mZet

Neues Mitglied
Hi,
ich hänge gerade ziemlich an einer Stelle in meinem Programm.
Kurze Vorgeschichte: Ich bin Informatikstudent und als Semesterprojekt sollen wir ein Musikverwaltungs/abspielprogramm entwickeln.
Einige Dinge haben wir dafür schon im Laufe des Semesters bereitgestellt bekommen oder selbst entwickelt.

Wie zum Beispiel auch diese 3 Dateien:

sampeCDs.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<cds>
<album freeDBId="e80d8910">
<title>Prince Charming</title>
<artist>Adam And The Ants</artist>
<genre>Pop</genre>
<year>1981</year>
<track>Scorpios</track>
<track>Picasso Vista el Planeta de los Simios</track>
<track>Prince Charming</track>
<track>Five Guns West</track>
<track>That Voodoo!</track>
<track>Stand and Deliver</track>
<track>Mile High Club</track>
<track>Ant Rap</track>
<track>Mowhok</track>
<track>S.E.X</track>
<track>Prince Charming (Demo)</track>
<track>Stand and Deliver (Demo)</track>
<track>Showbiz (Demo)</track>
<track>Picasso Visits the Planet of the Apes (Demo)</track>
<track>Who's a Goofy Bunny Then? (Demo)</track>
<track>Scorpio Writing (Demo)</track>
</album>
<album freeDBId="be0b310e">
<title>See Jungle! See Jungle! Go Join Your Gang Yeah, City All Over! Go Ape Crazy!</title>
<artist>Bow Wow Wow</artist>
<year>1982</year>
<genre>Rock</genre>
<track>Jungle Boy</track>
<track>Chihuahua (12" version)</track>
<track>Sinner, Sinner, Sinner (12" version)</track>
<track>Mickey Put It Down</track>
<track>(I'm a) TV Savage</track>
<track>Elimination Dancing</track>
<track>Golly! Golly! Go Buddy!</track>
<track>King Kong</track>
<track>Go Wild in the Country (12" version)</track>
<track>I Am Not a Know It All</track>
<track>Why Are Babies So Wise?</track>
<track>Orang-Outang</track>
<track>Hello, Hello Daddy (I'll Sacrifice You)</track>
<track>El Boss Dicho (12" version)</track>
</album>
</cds>[/XML]

TrackTableModel.java:
Java:
public class TrackTableModel extends AbstractTableModel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<Track> tracks;

	public List<Track> getTracks() {
		return tracks;
	}

	public void setTracks(List<Track> tracks) {
		this.tracks = tracks;
	}

	String[] columnNames={"Title","Year","Genre","Album","Artist"};
	
	public TrackTableModel(List<Track> tracks) {
		super();
		this.tracks = tracks;
	}


	@Override
	public int getColumnCount() {
		return columnNames.length;
	}

	@Override
	public String getColumnName(int i) {
		return columnNames[i];
	}

	@Override
	public int getRowCount() {
		return tracks.size();
	}

	@Override
	public Object getValueAt(int row, int column) {
		Track track = tracks.get(row);
		switch (column){
			case 0: return track.getTitle();
			case 1: return track.getYear();
			case 2: return track.getGenre();
			case 3: return track.getAlbum();
			case 4: return track.getArtist();
		}
		return null;
	}

	@Override
	public boolean isCellEditable(int arg0, int arg1) {
		return true;
	}
}

TrackTable.java:
Java:
public class TrackTable extends JTable {
	private static final long serialVersionUID = 3415859692797332368L;

	public TrackTable(List<Track> tracks) {
		super(new TrackTableModel(tracks));
		
		for (int i = 0; i < 5; i++) {
			TableColumn column =this.getColumnModel().getColumn(i);
		    switch (i){
		    case 0:column.setPreferredWidth(150);break;
		    case 1:column.setPreferredWidth(40);break;
		    case 2:column.setPreferredWidth(60);break;
		    case 3:column.setPreferredWidth(150);break;
		    case 4:column.setPreferredWidth(150);break;
		    }
		}
		this.setAutoCreateRowSorter(true);
	}
}

Die XML Datei "soll" also mit dieser speziellen Tabelle dargestellt werden.
Das klappt auch soweit.

Mit
Java:
Builder builder = BuilderFactory.newInstance().newBuilder();
	Node dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("sampleCds.xml"));
	List<Track> tracks = builder.fromDom(dom);
	TrackTable table = new TrackTable(tracks);
erstelle ich die Tabelle und setze sie dann auf ein Panel und dieses dann auf einen Frame. Klappt auch alles wunderbar.

Jetzt gibt es einen "Edit"-Button. Bei Klick auf selbigen wird ein neues Dialogfenster geöffnet mit diversen JTextFields, in denen jeweils der Inhalt der einzelnen Zellen der aktuell selektierten Reihe in der Tabelle angezeigt wird. Auch dies klappt. Ebenfalls befindet sich dort ein "Save"-Button, der die Änderungen dann vorerst nur mal im JTable übernehmen soll. Dafür habe ich in der Hauptklasse eine Stringvariable in der die Änderung gespeichert wird ("editedAlbum", nur fürs Album da erstmal testweise) und die nach Schließen des "Edit-Fensters" dann schließlich an der richtigen Stelle in der Tabelle gesetzt werden soll.

Dies alles geschieht in einer extra Klasse die ActionListener implementiert und die Tabelle im Konstruktor übergeben bekommt.

TableListener.java: (GUI ist die Hauptklasse)
Java:
public class TableListener implements ActionListener {
	TrackTable tab;
	JFrame fr;
	GUI fenst;
	
	public TableListener(TrackTable tabelle) {
		tab = tabelle;
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		String utitle = ""+tab.getValueAt(tab.getSelectedRow(), 0);
		String uyear =	""+tab.getValueAt(tab.getSelectedRow(), 1);
		String ugenre = ""+tab.getValueAt(tab.getSelectedRow(), 2);
		String ualbum = ""+tab.getValueAt(tab.getSelectedRow(), 3);
		String uartist = ""+tab.getValueAt(tab.getSelectedRow(), 4);
		
		JDialog editwind = new EditWindow(fr, fenst, utitle, uyear,ugenre,ualbum,uartist);	
	
		System.out.println(fenst.editedAlbum);
		tab.setValueAt(fenst.editedAlbum, tab.getSelectedRow(), 3);

		System.out.println(tab.getValueAt(tab.getSelectedRow(), 3));
//		tab.repaint();
//		tab.updateUI();
//		tab.validate();
	}

}

In der Variable wird die Änderung auch gespeichert, wenn ich nach dem setValueAt allerdings für die selbe Zelle nochmal getValueAt aufrufe, ist von der Änderung nichts zu sehen.

Wie kann ich das ändern bzw wo liegt das Problem? Die auskommentierten Befehle repaint,updateUI und validate haben auch nicht geholfen. Bei Google habe ich schon einige Hilfestellungen gefunden, allerdings habe ich es nicht hinbekommen, diese an meinen Code anzupassen, da sich dort meist auf ein Standart JTable mit DefaultTableModel bezogen wurde.

Ich verzweifel da mittlerweile nun schon einige Stunden dran und habe schon einiges versucht doch nichts hat geholfen :(

Hoffentlich kann mir jemand weiterhelfen :D Wenn noch weitere Codeteile benötigt werden, einfach Bescheid sagen!

Danke!
 

Steff87

Aktives Mitglied
HI!
Ich denke, dass du die setValueAt-Methode in TrackTabelModel überschreiben solltest, falls noch nicht geschehen. Ich hab sie zumindest nicht in deinem Post gesehen.
Momentan schreibst du nur temporär in die Tabelle. Du musst aber die Liste, die dahinter steckt verändern und das machst du noch nicht.
Schreib eine setValueAt-Methode die dies für dich ereldigt und schon sollte es funktionieren.
 

mZet

Neues Mitglied
Hey,
schonmal Vielen Dank für die schnelle Antwort.
Habe jetzt mal die setValueAt Methode überschrieben und es zumindest für Title, Year und Artist hinbekommen, dass die Änderungen in der Tabelle angezeigt werden.
Bei Album und Genre steh ich nun vor dem Problem, dass es sich dabei nicht um einfache Strings handelt, sondern bei Album um ein eigenes Interface und bei Genre um ein Enum. Da muss ich nachher mal gucken wie ich das noch machen kann.


Dann hätte ich nun noch eine zweite Frage:
Zum Speichern der Änderungen in der XML Datei müsste ich dann wahrscheinlich die Tabelle komplett neu auslesen und dann in der XML Datei speichern, oder? Das wird dann wohl auch noch ein Spaß, die Tabelle mit den ganzen Tags etc. zu speichern...hab ich mir noch gar nicht angeguckt :( :D
 

Steff87

Aktives Mitglied
Ja, das könnte ein kleines Probelm darstellen, obwohl es beim Enum sich um Zahlenwerte handelt, zumindest eine art Zahl.

Um die XML-Datei zu schreiben musst du die gesamte Tabelle auslesen.Wahrscheinlich musst du die XML auch komplett neu schreiben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Crazynet xls Datei in JTable AWT, Swing, JavaFX & SWT 3
D Swing JTable in Datei speichern und laden AWT, Swing, JavaFX & SWT 3
E CSV datei in jtable laden AWT, Swing, JavaFX & SWT 4
H Daten aus einer JTable in einer Datei speichern AWT, Swing, JavaFX & SWT 10
F Bilder zu ausführbarer Jar-Datei hinzufügen AWT, Swing, JavaFX & SWT 5
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
princess_sara1997 .jar Datei führt den Code nicht richtig aus AWT, Swing, JavaFX & SWT 19
Yonnig Lokale HTML-Datei in Java GUI rendern AWT, Swing, JavaFX & SWT 4
N JavaFX Javafx intelij Projekt zu ausführbaren jar Datei Machen AWT, Swing, JavaFX & SWT 1
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
J Java Datei durch CMD mit Parameter ausführen AWT, Swing, JavaFX & SWT 1
B JavaFX JavaFX Anwendung deployen (entw als runnableJAR oder exe-Datei) AWT, Swing, JavaFX & SWT 15
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
MasterCaution Swing .jar Datei ausführen AWT, Swing, JavaFX & SWT 12
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
N Ausführbare Datei aus JavaFX Projekt erstellen AWT, Swing, JavaFX & SWT 22
L Bilder werden in exportierter Datei nicht geladen AWT, Swing, JavaFX & SWT 6
L Csv-Datei einlesen AWT, Swing, JavaFX & SWT 34
J *.jar öffnet PDF-Datei nicht AWT, Swing, JavaFX & SWT 35
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
F Java FX Von der Fxml Datei zum Objekt AWT, Swing, JavaFX & SWT 8
A JavaFX Anwendung in Jar Datei AWT, Swing, JavaFX & SWT 8
F FXML Datei aus dem SceneBuilder in Eclipse aufrufen AWT, Swing, JavaFX & SWT 1
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
P JavaFX - XCF Datei von Gimp kann nicht angezeigt werden AWT, Swing, JavaFX & SWT 3
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
7 JavaFX Verwendung einer ResizableCanvas-Klasse in fxml-Datei AWT, Swing, JavaFX & SWT 3
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
F Pfad von eingelesener Datei AWT, Swing, JavaFX & SWT 10
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
G .txt-Datei einlesen /formatieren in JTextfield ?? AWT, Swing, JavaFX & SWT 8
B ST Datei einlesen AWT, Swing, JavaFX & SWT 1
D JavaFX Jar Datei Signieren mit Java 8u45 AWT, Swing, JavaFX & SWT 2
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
M Swing PDF Datei nach drucken nicht löschbar AWT, Swing, JavaFX & SWT 6
A Databinding in FXML-Datei AWT, Swing, JavaFX & SWT 1
H 2D-Grafik .EPS Datei in .PNG konvertieren AWT, Swing, JavaFX & SWT 1
G Datei öffnen Dialog modifizieren AWT, Swing, JavaFX & SWT 13
F Swing Java Swing Array in Datei und wieder raus AWT, Swing, JavaFX & SWT 7
L 2D-Grafik PNG Datei in JLabel Array Problem AWT, Swing, JavaFX & SWT 4
B JAVAFX und CSS Datei in Eclipse AWT, Swing, JavaFX & SWT 4
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
S Aus XML Datei FXML generieren AWT, Swing, JavaFX & SWT 4
V JavaFX - fxml-Datei laden (neben CSS) AWT, Swing, JavaFX & SWT 2
S Swing Verzeichnis/Datei-Pfad in JTextField schreiben AWT, Swing, JavaFX & SWT 2
A JFileChooser Datei speichern AWT, Swing, JavaFX & SWT 4
T Aus JAVA.Jar GUI eine Flash-Datei machen AWT, Swing, JavaFX & SWT 3
A Datei weiterverwenden mit JFileChooser AWT, Swing, JavaFX & SWT 6
A AWT TTF-Datei zu Font-Objekt finden? AWT, Swing, JavaFX & SWT 5
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
J JFileChooser - Datei speichern AWT, Swing, JavaFX & SWT 7
M Datei in jar öffnen AWT, Swing, JavaFX & SWT 11
W Funktion aus einer Java Datei in eine andere einbauen AWT, Swing, JavaFX & SWT 25
P Neue Datei erstellen in JPanel AWT, Swing, JavaFX & SWT 5
N Speicherpfad für Datei auswählen AWT, Swing, JavaFX & SWT 2
A JTextArea - Zeichenbegrenzung nach .txt Datei import AWT, Swing, JavaFX & SWT 6
N Applet JButton soll html Datei aus einem Ordner öffnen AWT, Swing, JavaFX & SWT 2
E Swing jTextPane Text datei anzeigen AWT, Swing, JavaFX & SWT 7
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
T SWT:Datei speichern / öffnen AWT, Swing, JavaFX & SWT 6
X Applet Java Applet Datei Ausführung AWT, Swing, JavaFX & SWT 9
J Bild aus Datei in BufferedImage laden AWT, Swing, JavaFX & SWT 4
J Fehler beim Gif Datei öffnen AWT, Swing, JavaFX & SWT 2
N Swing TreePath Datei öffnen AWT, Swing, JavaFX & SWT 7
B Datei öffnen Dialog AWT, Swing, JavaFX & SWT 9
kodela Swing JFileChooser und die Datei-Extension AWT, Swing, JavaFX & SWT 3
T Info Datei AWT, Swing, JavaFX & SWT 3
J ImageIcon: ZipException bei ungültiger PNG-Datei AWT, Swing, JavaFX & SWT 2
W jar Datei öffnen AWT, Swing, JavaFX & SWT 4
W TrayIcon mit jdic (Problem bei .jar Datei) AWT, Swing, JavaFX & SWT 3
D Nodes eines statischen JTrees sollen auf Anker (Textmarken) in einer HTML-Datei zeigen AWT, Swing, JavaFX & SWT 8
R Swing XML Datei in JTree, Problem mit Daten einlesen AWT, Swing, JavaFX & SWT 34
M AWT Datei auf server speichern und beschreiben AWT, Swing, JavaFX & SWT 7
P JMenu-Erweiterung in externer Datei AWT, Swing, JavaFX & SWT 5
M Text in txt-Datei in letzte Zeile schreiben? AWT, Swing, JavaFX & SWT 14
X Swing Inhalt einer JEditorPane in Datei abspeichern AWT, Swing, JavaFX & SWT 5
E Datei in TextArea anzeigen AWT, Swing, JavaFX & SWT 12
data89 Nimbus Look and Feel als gepackte JAR-Datei AWT, Swing, JavaFX & SWT 3
S Auswahlfenster: Datei beim Doppelklick öffnen AWT, Swing, JavaFX & SWT 8
N Swing Hintergrund Bild in JAR Datei AWT, Swing, JavaFX & SWT 2
I Swing .Jar Datei - funktioniert - nun als Applet AWT, Swing, JavaFX & SWT 13
M Text-Datei in einem JFrame öffen? AWT, Swing, JavaFX & SWT 2
Fadi Images in JAR Datei laden? AWT, Swing, JavaFX & SWT 5
K Hyperlink als Datei identifizieren AWT, Swing, JavaFX & SWT 2
S Jar-Datei funktioniert nicht richtig AWT, Swing, JavaFX & SWT 3
1 Laden einer Datei zur Echtzeit Darstellen AWT, Swing, JavaFX & SWT 7
P Problem bei Datei zur Verwaltung von Tabs AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben