Swing JInternalFrame komplett neu laden

Oldboii

Mitglied
Hier der dritte Hilfeschrei von mir inzwischen.
Ich hab dieses Problem jetzt schon recht lange umschifft weil ichs einfach nicht verstanden habe.
Und jetzt bin ich bei dem Punkt, es geht einfach nicht anders. Wie immer beschäftige ich mich
inzwischen schon fast 2 Tage damit und hab dementsprechend auch schon alles durchforstet und
kaputt probiert.
Nunja also ich wollte zuerst durch nen Refresh-button im InternalFrame selber den gesamten JIF
neu zeichnen (2 ScrollPanels + jTree + Table).. nichts ist passiert, in egal welcher Kombination.
Jetzt hab ich im Hauptfenster nen Menüpunkt "Manager aktualisieren" über den ich das selbige
probiert habe.
Und ganz ursprünglich wollte ich eigentlich das sich der jeweils betroffene Teil z.B. der JTree,
neu zeichnet, nachdem der User ihm in nem JDialog nen Node hinzugefügt hat. Nur da hats bei mir
extrem daran gescheitert wie ich vom JDialog den parentFrame (der besagte JIF) ansprechen soll.

Also was ich alles probiert habe, was ich so aus Tutorials und anderen Threads gelesen habe:
revalidate();
repaint();
zuerst invalidate(); dann validate(); + repaint();
und auch updateUI(); etc.
mein letzter Versuch war sogar dispose(); und irgendwie neu aufrufen.. was gleich drei mal nicht
funktioniert hat.

puh keine Ahnung was an code jetzt interesant wäre. Alle meine GUI Elemente sind eben vom
VisualEditor Autogeneriert, vielleicht liegts irgendwie daran.

Mein InternalFrame z.B.
Java:
public Gerätemanager() {
		super();
		initialize();
	}

	private void initialize() {
		this.setSize(1192, 497);
		this.setPreferredSize(new Dimension(700, 500));
		this.setResizable(true);
		this.setTitle("Gerätemanager");
		this.setContentPane(getJContentPane());
	}

genial wär halt einfach ne Methode mit der wirklich die gesamte Klasse vernichtet wird und neu
geladen wird, dann werden auch gleich alle geänderten oder hinzugefügten Daten aus der DB
mit übernommen.
Irgendne Idee fänd ich nett. Aber auch so schonmal Danke.. java-forum hat mir die letzten paar
Wochen schon immens geholfen.
 
Also zusammengefasst besteht das Problem darin, dass bei Datenänderungen JTables und JTrees in einem Fenster nicht aktualisiert werden? Das liegt am jeweiligen Model bzw dessen Implementierung

--> Wenn eine saubere Implementierung von TableModel und TreeModel vorliegen (meine Empfehlung DefaultTableModel und DefaultTreeModel verwenden bzw. von diesen erben) werden die GUI Komponenten bei Änderung deren Models automatisch aktualisiert.

Mit zum Problem beitragen könnte automatisch generierter GUI Code sein. Ich persönlich halte nicht viel von GUI Editoren...
 
ah ja Danke schonmal für den Tipp. Ich benutze sogar für beides ein Model, da wird allerdings nichts
automatisch neu geladen, wobei das grad eh nicht möglich ist, weil ja nur Einträge in die DB gemacht
werden und das können ja auch die DefaultModels nicht riechen ^^. Und ich geh mal bei auto-
generierter GUI + eingepflanzten DefaultModels davon aus das meine Implementierung alles andere als sauber ist.

Und ich halte eigentlich auch nicht viel von GUI-Editoren.. inzwischen... allerdings bin ich in Eclipse
bisschen damit erzogen worden.

Hier mal mein JTree.
Java:
private JTree getJTree() {
		if (jTree == null) {
			tobj.ObjektAbfrage(); //Datenbankabfrage - füllt flatData
			final DefaultMutableTreeNode root = new DefaultMutableTreeNode(
					"RootName");
			final Stack<DefaultMutableTreeNode> stack = new Stack<DefaultMutableTreeNode>();
			for (String[] row : TreeObjekte.flatData) {
				// Den Stack an Level anpassen
				final Iterator<DefaultMutableTreeNode> stackIt = stack
						.iterator();
				for (int level = 0; level < row.length && stackIt.hasNext(); level++) {
					if (!stackIt.next().getUserObject().equals(row[level])) {
						stack.setSize(level);
						break;
					}
				}
				// Wiederaufbau des stacks
				for (int level = stack.size(); level < row.length; level++) {
					final String s = row[level];
					final DefaultMutableTreeNode child = new DefaultMutableTreeNode(
							s);
					(stack.isEmpty() ? root : stack.peek()).add(child);
					stack.push(child);
				}
			}
			DefaultTreeModel jTreeModel = new DefaultTreeModel(root);
			jTreeModel.addTreeModelListener(new MyTreeModelListener());

			jTree = new JTree(root);
Bei mir mangelt es eben immer an Struktur und Funktionalität, ich bin immer nur froh wenn plötzlich
irgendwas funktioniert.
 
Mal wieder danke Michael, du hast mich in die richtige Richtung geschubst.
Und wieder bin ich wie der letzte Mongo vor meiner NullPointerException gesessen...
was is, ich hab wiedermal irgendwas mit null vordeklariert und wunder mich dann...

private DefaultTreeModel jTModel = null;
/
ganz viele Dinge passieren
/
jTModel.reload();

NullPointer!!
Meine Fresse, passiert mir nicht nochmal... hoffentlich 😀
 

Neue Themen


Zurück
Oben