Komplette GUI reloaden

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo

gibt es in Java keine möglichkeit, das aktuelle JFrame komplett neu zu laden!?

also Treeview etc. zu aktualisieren ?!

:-(

such jetzt schon 3 Stunden und finde gar nichts :-(
 
G

Guest

Gast
Hm

der Inhalt meines Treeviews hat sich geändert


und das würde ich dem Benutzer auch gerne zeigen :-/
 

AlArenal

Top Contributor
Wenn du die Daten vom Model änderst, musst du entsprechende Events abfeuern lassen, damit der View das auch mitbekommt und die Anzeige erneuert. Ich kauf mir auch kein neues Auto, wenn der Tank leer ist...
 
G

Guest

Gast
Und was wäre ein solcher Event?

ich verstehe nicht so ganz, was ich machen soll ??? :oops:
 
G

Guest

Gast
Jetzt nur mal angenommen, ich würde mir einen Button "Aktualisieren" machen,

damit könnte ich doch auch einen solchen Event auslösen oder?

ich habe momentan einen Button, mit dessen hilfe ich einen Knopten aus dem Treeview entferne

nachdem der knoten entfernt wurde, muss ich ja den Baum neu laden... richtig oder?

welchen befehl verwende ich da?


myTree.?????();
 
G

Guest

Gast
Vielleicht sollte ich für heute einfach feierabend machen, vielleicht kapier ichs morgen .... :-(

also hier noch mal die zusammenfassung

ich hole mir Daten aus einer Datenbank
stelle diese im Treeview dar

dann kann ich durch markieren eines elementes im Treeview und anschließendes anklicken eines Buttons den eintrag aus der Datenbank löschen

dann hole ich mir den neuen Treeview aus der Datenbank und möchte diesen nun darstellen

und genau hier hängt es....... es geht einfach nicht


na ja wie gesagt... vielleicht kapier ichs morgen (glaub ich aber ehr nicht) :lol:
 

AlArenal

Top Contributor
Zunächst einmal ist das ein falscher Ansatz. Du kannst nicht bei jeder Änderung einfach alle Daten neu ladenl. Ist doch Overkill... Was spricht dagegen den Eintrag in der DB und im Model zu löschen? Dadurch spart man sich das komplette Neuladen der Daten.
 

L-ectron-X

Gesperrter Benutzer
Würde es nicht auch nur genügen die Daten einmal bei Programmstart ins Model einzulesen, im weiteren Verlauf ausschließlich mit dem Model zu arbeiten und beim Beenden des Programms die Daten in die DB zu schreiben?
 
G

Guest

Gast
Nein, das würde nicht genügen

sobald ich eienen eintrag ausgewählt habe und auf löschen klicke, soll dieser sofort in der Datenbank gelöscht werden und der Treeview aktualisiert werden...... :-/

hab das problem mit der GUI aber auch noch an anderen stellen

kann man da wirklich nicht einfach nen refesh befehl oder ähnliches absetzen ?
 
G

Guest

Gast
ja coole sache

und welchen Befehl ?

haste vielleicht mal n beipiel ?
 
G

Guest

Gast
Sorry aber ich steh auf m schlauch
na ja egal

vielleicht find ich woanders noch hilfe :-/
 
G

Guest

Gast
hallo

ich versuchs jetzt noch einmal

ich hab einen JTree meinbaum;

und einen Button btn_aktualisieren

was für ein code muss bei dem button in den Event teil für Mouse clicked wenn dann der Baum aktualisiert werden soll

der baum bekommt komplett neue Daten

also zuerst hat der die daten aus z.B. aus der methode

tree = stools.getTree1();

und bevor der button geklickt wird, bekommt der die daten

tree = stools.getTree2();

und dann muss die ansicht aktualisiert werden


jemand ne idee ?

bitte mit beispielcode wenns nit zu viel verlangt ist
 

norman

Top Contributor
wie schon gesagt, du musst an deinem tree einen TreeModelListener anmelden. der reagiert dann, wenn:
API hat gesagt.:
void treeNodesChanged(TreeModelEvent e)
Invoked after a node (or a set of siblings) has changed in some way.

void treeNodesInserted(TreeModelEvent e)
Invoked after nodes have been inserted into the tree.

void treeNodesRemoved(TreeModelEvent e)
Invoked after nodes have been removed from the tree.

void treeStructureChanged(TreeModelEvent e)
Invoked after the tree has drastically changed structure from a given node down.
 
G

Guest

Gast
ja ich mitlererweile (du hast es ja schon oft genug geschrieben) weis ich dass ich das anmelden muss

meine frage ist nur WIE ich den anmelden muss......

nicht WAS sondern WIE ;-) :-D
 
R

Roar

Gast
du must gar nix nirgendwo anmelden.
du hast dein TreeModel, dort änderst du die daten, der JTree wird automatisch aktualisiert, wenn du a) die DefaultTreeModel implementierung verwendest oder ein eigenes Model schreibst, welches TreeModelEvent feuern kann.
 
G

Guest

Gast
da wird gar nix aktualisiert, sonst hätte ich den thread ja nicht eröffnet :-(
 
G

Guest

Gast
Code:
	private JTree getUserTree() {
		if (userTree == null) {
			userTree = stools.getUserTree();
		}
		return userTree;
	}


private JButton getBtn_deleteUser() {
		if (btn_deleteUser == null) {
			btn_deleteUser = new JButton();
			btn_deleteUser.setBounds(new java.awt.Rectangle(241,30,86,28));
			btn_deleteUser.setText("Löschen");
			btn_deleteUser.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					TreePath path = userTree.getSelectionPath();
					Object[] o = path.getPath();
					boolean status = dtools.deleteUser(o[1].toString());
					if (status)
					{
						txt_status.setText("erfolgreich gelöscht");
						
						userTree = stools.getUserTree();
					}
					else
					{
						txt_status.setText("Fehler beim löschen");
					}
					
					
				}
			});
dass passiert in einer klasse

und folgendes ist die getUserTree methode.....

Code:
	public JTree getUserTree()
	{
		JTree tree;
		try
		{
			DefaultMutableTreeNode root = new DefaultMutableTreeNode("PDF Verwaltung");
			ResultSet users = dbtools.doQuery("SELECT UID from Benutzer WHERE NOT (UID = 'ADMINISTRATOR')");
			while (users.next())
			{
				DefaultMutableTreeNode child = new DefaultMutableTreeNode(users.getString(1));	
				root.add(child);
			}
			tree = new JTree(root);
			tree.setRootVisible(false);

			return tree;
		}
		catch (Exception e)
		{
			log.writeErrorLog(e,"SelectTools.java","getUserTree");
			return null;
		}	
	}
 

AlArenal

Top Contributor
Da änderst du doch nichts am Model, du holst einfach einen neuen JTree.. das gehört ja schonmal ganz verboten auch noch gleich den View auszuwechseln.. da kann sich im UI auch nix ändern. Zum einen ist die Vorgehensweise ein riesengroßes Foobar, zum anderen müsstest du wenn schon auch den neu erzeugte JTree wieder ins UI schieben, denn da hockt dem Code zufolge noch der vorige Tree, mit dem vorigen Model und zeigt dir den alten Stand der Dinge an.

Mich schüttelts.. ;)
 
G

Guest

Gast
und wie solls ichs dann löen ?!

ich find das eigentlich ziemlich einfach so

also den Treeview neu aufzubauen... holt sich ja dann die neuen daten aus der datenbank
 

AlArenal

Top Contributor
Du solltest dir nochmal ein Tutorial oder Buch zum Thema JTree und TreeModel reinziehen, bzw. mal so die Grundlagen von MVC. Ich werde den Teufel tun und dir sagen, wie du nun auf Basis deiner aktuellen Vorgehensweise ne Muckefuck-Lösung hinstrickst, die jedes Mal unnötig Views erzeugt und irgendwelche Repaints und Revalidates erfordert, um von hinten durch die Brust zielgenau ins Auge zu treffen ;)

Es ist ja auch logischer beim Fernseher den Sender zu wechseln, anstatt sich für jeden Kanal nen neuen Fernseher zu kaufen...

Links in die passende Richtung haben wir hier ja schon zuhauf im Thread.
 
G

Guest

Gast
ja ok.... je mehr ich drüber nach denk, je mehr muss ich dir (euch) recht geben....


schande dem amateur programmier :)

also eigentlich würd es ja reichen, das momentan markierte element aus dem Treeview zu löschen

da gibt es bestimmt ne methode dazu oder?
 
G

Guest

Gast
Servus,

ich habs jetzt folgendermaßen gelöst......


ist das ok oder aus das auch ne Muckefuck lösung?




DefaultMutableTreeNode node;
node = (DefaultMutableTreeNode) (userTree.getSelectionPath().getLastPathComponent());
((DefaultTreeModel)userTree.getModel()).removeNodeFromParent(node);
 
B

Beni

Gast
Die Lösung ist ok, solange du DefaultMutableTreeNodes verwendest. Wenn du was anderes verwendest, wird diese Lösung unbrauchbar.
 
G

Guest

Gast
Ja ich verwende DefaultMutableTreeNodes

juhuuuuu ich habs geschafft :D :bae: :meld:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben