Swing JFrame neu zeichnen

Hi!
Wenn ich mein Fenster neu zeichnen will mit alle Panels etc drin. Wie mache ich das am besten?

Wenn ich repaint aufrufe bringts nichts, das ist mir klar, weil heavyweight..
Wenn ich meine draw Methode ausführe (alle Components neu beladen etc), dann wird ein Panel welches mit Buttons bestückt ist zwar aktiviert, aber ich kann nichts drücken.
Wenn ich sage:
jframe.dispose();
jframe = new JFrame();

etc, dann klappts. Aber wer will schon bei jeder Aktualisierung ein sich schließendes und wieder öffnendes Fenster?! Dann bin ich auf validate() gestoßen und dachte das wär genau das was ich brauche. Aber leider sah es nur gut aus und alle Inhalte wurden letztendlich dem Nirvana überführt ;) (Wenn ich das Fenster minimiere und wieder hoch hole, dann ist alles im Anfangszustand ;) - blöd vor allen Dingen wenn dann auch meine Verbindung zum Server weg geht oder ein anderer Client ein leeres Objekt erhält..

Lange Rede kurzer Sinn: Wie bringe ich mein JFrame zum Neuzeichnen ohne manuell jedes Element vollkommen neu erstellen zu müssen?
 
Also ich habe eine Klasse Control, welche von einem JPanel erbt.

Unter anderem sind diese beiden Methoden drin:
Java:
	public void aktivieren(){
		jbHalf.setEnabled(true);
		jbOnce.setEnabled(true);
		jbTwice.setEnabled(true);
		jbFold.setEnabled(true);
		jbCall.setEnabled(true);
		jbRaise.setEnabled(true);
		slider.setEnabled(true);
		jtBetrag.setEnabled(true);
		namenAnpassen();
	}
	
	public void deaktivieren(){
		jbHalf.setEnabled(false);
		jbOnce.setEnabled(false);
		jbTwice.setEnabled(false);
		jbFold.setEnabled(false);
		jbCall.setEnabled(false);
		jbRaise.setEnabled(false);
		slider.setEnabled(false);
		jtBetrag.setEnabled(false);
		namenAnpassen();
	}

Ich hab also jedes Element einzeln deaktiviert bzw aktiviert. Irgendwie hatte control.setEnabled(true/false) keinerlei Wirkung.
So wie es jetzt ist ging es auch immer. Als ich noch nur an einem Rechner gearbeitet hatte, wurde Control immer passend aktiviert, bzw deaktiviert. Seit ich die Informationen übers Netz jage wird es zwar deaktiviert oder aktiviert, aber wenn es aktiviert ist kann ich trotzdem nichts drücken. Der tooltiptext kommt noch, aber das tut er ja auch im deaktivierten Zustand.
Wenn ich jetzt control.repaint() mache passiert rein gar nichts, obwohl mir control.isLeightweight natürlich true zurückgibt.

Ist grad echt Krisenzustand hier.. ich check nicht woran es liegt. Also wenn ich das beinhaltende JFrame namens gui per gui = new MainGUI(); (die Klasse die von JFrame erbt) neustarte, dann klappt alles wunderbar. Aber man sieht natürlich die Veränderung.
Was ist mit diesen ganzen paintComponent(s) Sachen? Ich hab überall nur JFrame, JPanel etc benutzt..

Anderen Code zu zeigen macht kaum Sinn, weil alles eigene klassen sind und insgesamt davon um die 30 hier rumfliegen. Ist halt ein großes Projekt..
 
Klar:

deaktiviert:


aktiviert:


Das ist das Panel jeweils aktiviert bzw deaktiviert. Bei der aktivierten Version lässt es sich aber trotzdem nicht klicken/benutzen. Ich hab auf meinem Laptop das komplett gleiche Spiel, nur, dass ich wie schon erwähnt das JFrame komplett erneuere. Dann kann ich es auch nutzen.
Aber da muss es doch was besseres geben?!
 

Paddelpirat

Bekanntes Mitglied
Darf ich mal fragen, was du eigentlich übers Netz schickst? Das klingt irgendwie komisch...
Der Code den du da gepostet hast ist irgendwie Aussagelos, ist ja nur das enablen/disablen der Buttons...
 
Ich verschicke ein Objekt von mir, das nenne ich TischInfo. Darin sind alle notwendigen Daten enthalten und die werden auch von der GUI benutzt. Daran liegts nicht. Wenn in TischInfo steht, dass der Spieler der jetzt kommt "dran" ist, dann wird sein Spielmenü aktiviert - sonst halt deaktiviert.

Genau das ist das was mich so verwundert. Ich deaktiviere und aktiviere nur buttons, mehr mache ich nicht. Aber es klappt nur wenn ich das gesamt JFrame neu zeichne...

PS: Angenommen ich hätte einen Taschenrechner. Dann würde ich ihm sagen (nachdem er gestartet ist)

jB_sieben.setEnabled(false);

->Dann sollte der Button doch auch disabled sein oder muss ich noch was machen?! Und wenn man dann wieder enabled klappt das doch auch oder?

Also ich bin langsam echt frustriert..
 
Zuletzt bearbeitet:

Paddelpirat

Bekanntes Mitglied
Du solltest dann nochmal überprüfen, ob noch irgendetwas das veränderte GUI blockiert, nachdem du so ein Objekt verschickt hast. Ohne Code ist das echt schwer was genaueres zu sagen. Gibt es vielleicht irgendwelche Fehlermeldungen nachdem sich das GUI geändert hat?

Edit (zu deinem P.S.): Das mit den Buttons aktivieren/deaktivieren funktioniert ja auch so wie du es geschrieben hast, deswegen vermute ich den Fehler ja auch ganz woanders und das mit dem übers Netz schicken ist halt so eine Stelle, die verdächtig klingt.
 
Zuletzt bearbeitet:
Java:
ti = (TischInfo) client.getObject();
//		gui.dispose();
//		gui = new MainGUI();
		gui.setClient(client);
		gui.start(ti);
		gui.setTischInfo(ti);

Das hier ist die clientseitige Abfrage nach dem ti Objekt.
Den ersten Teil durchläuft er bis er das Objekt vom Server bekommen hat. Danach ist diese besagte Stelle wo das Fenster geschlossen und dann neu geladen wird. Aber dann kann er die nachfolgenden Infos perfekt nutzen. setClient ist zum Setzen der Verbindung zum Server, start initialisiert alle zu zeichnenden Sachen und zeichnet sie dann in Abhängigkeit der Werte die ti übermittelt. setTischInfo führt noch etwaige Veränderungen durch.
In setTischinfo wird geguckt ob der Spieler dran ist und dann ggf das Controlobjekt aktiviert.

Was meinst du mit GUI blockieren?
Fehlermeldungen habe ich keine..
 

Paddelpirat

Bekanntes Mitglied
Also mal sehen ob ich das richtig verstanden habe:

Dein JFrame heißt
Code:
gui
und das wird schon vollständig angezeigt. (Das ist der Stand vor dem Code-Schnipsel den du gepostet hast)

Nun wartest du in der Zeile
Java:
ti = (TischInfo) client.getObject();
darauf, dass der Server dir ein TischInfo-Objekt schickt. Anschließend wird dein GUI durch das TischInfo-Objekt verändert (sprich die Buttons werden enabled).

Ich würde darauf tippen, dass dein GUI blockiert ist, weil da noch irgend eine Endlosschleife in einem separaten Thread weiter läuft und z.B. ein Event nicht beendet wird, in dem du deinen Code-Schnipsel aufgerufen hast.

Das würde auch erklären wieso dein Fenster nur Funktioniert, wenn du es komplett neu erstellst. In den auskommentierten Zeilen erzeugst du nämlich ein komplett neues Objekt deines Fensters und änderst das GUI des neuen Fensters. Das alte Fenster wird aber gar nicht richtig beendet, weil es immer noch hängt (z.B. wegen oben genannter while-Schleife).
 
Das ist mir schon klar. Das auskommentierte ist die Variante die dann funktioniert. Aber wie du schon erkannt hast, wirds dadurch natürlich nicht beendet. Ich glaube aber nicht, dass ich in eine Schleife stecke, kann ich mir nicht vorstellen. Hab grad noch eine beunruhigende Entdeckung gemacht:
Wenn ich es ohne das gui.dispose() und gui = new... mache, dann werden sämtliche Inhalte verworfen sobald das Fenster einmal minimiert wurde o_O Andersherum ist es natürlich gar kein Problem...:lol: (Galgenhumor)

Vllt ist das also doch gar nicht nur dem validate() zu verdanken, dass das bei meinen Versuchen damit auch passiert ist..
Validate() verändert doch rein gar nichts an der Haltung der Daten etc oder? Es bezieht sich doch NUR auf grafische SAchen und würde alles andere vollkommen in Ruhe lassen oder?
Weil wenn ich es benutze, dann hab ich schwupps mal eben ganz locker flockig ne NPE wenn ich mein Client Objekt benutzen will, damit ich dem Server was schicken kann. Aber das selbe habe ich jetzt auch wo ich alles nochmal umgebaut habe..

Meine Mainklasse ist Runde:
Die hat ein Objekt gui,
ein ti, welches immer wieder neu vom server bezogen wird
ein Client Objekt welches die Verbindung zum Server herstellt und hält
-------------
So ist der Ablauf:
- Die gui startet
- Spieler meldet sich an (Verbindung wird aufgebaut und gespeichert)

- Spieler guckt ob er ein neues Objekt vom Server bekommen kann und holt es ggf
- gui wird mit Objekt beladen (wenn Spieler dran kann er das Objekt verändern und verschicken)

Die letzten beiden Punkte laufen sozusagen endlos, halt bis zur Abmeldung.
 

Paddelpirat

Bekanntes Mitglied
Kannst du nur mal testweise die Verbindung zum Server beenden, nachdem du dein ti erhalten hast?

(Brauchst dich übrigens nicht für jeden Post bedanken ;-))
 
Hilft nichts.. aber danke ;)

Erstmal werd ich wohl mit dem Prob weiterleben müssen. Dann kann ich wenigstens weiter an der Logik arbeiten... mal sehen, vllt weiß ja noch einer was hier los sein könnte :)
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
M Swing In GUI-Builder-JFrame mit Menü Schreiben und Zeichnen AWT, Swing, JavaFX & SWT 4
W Zeichnen in einem JFrame nach Resize AWT, Swing, JavaFX & SWT 7
J JFrame manuell zeichnen AWT, Swing, JavaFX & SWT 11
R JPanel auf JFrame neu zeichnen AWT, Swing, JavaFX & SWT 11
A Zeichnen auf JFrame aus anderer class heraus AWT, Swing, JavaFX & SWT 12
R In JFrame oder in Canvas mit grafischen Elemente zeichnen AWT, Swing, JavaFX & SWT 2
V Zeichnen auf JPanel und in JFrame einfügen AWT, Swing, JavaFX & SWT 16
3 JFrame zeichnen AWT, Swing, JavaFX & SWT 2
S JFrame neu zeichnen! AWT, Swing, JavaFX & SWT 8
I In JFrame zeichnen möglich? AWT, Swing, JavaFX & SWT 3
U JFrame bei Größenänderung immer neu zeichnen AWT, Swing, JavaFX & SWT 4
G JFrame neu zeichnen AWT, Swing, JavaFX & SWT 6
M In ein JFrame zeichnen AWT, Swing, JavaFX & SWT 4
B im JFrame gesetzte Hintergrundfarbe wird beim Ausführen nicht gezeigt AWT, Swing, JavaFX & SWT 2
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
Paty JFrame anfänger bräuchte hilfestellung AWT, Swing, JavaFX & SWT 7
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
Mausposition relativ zu JFrame bekommen AWT, Swing, JavaFX & SWT 6
sserio JFrame setIconImmage() funktioniert nicht AWT, Swing, JavaFX & SWT 3
N CPU Belastung bei offenem JFrame auf fast 100% AWT, Swing, JavaFX & SWT 15
N Knopf ganz oben (JFrame) AWT, Swing, JavaFX & SWT 9
N JFrame löscht alles, wenn groß gemacht AWT, Swing, JavaFX & SWT 9
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
E JFrame resizing AWT, Swing, JavaFX & SWT 2
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Swing Design des oberen Balkens in JFrame AWT, Swing, JavaFX & SWT 2
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
L Verbindung von Code und JFrame AWT, Swing, JavaFX & SWT 4
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
T JavaFX JFrame verhalten wie JOptionPane (ErrorMessage) AWT, Swing, JavaFX & SWT 1
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
P JPanle, JFrame und Graphics AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
D Mit Jmenu neue JFrame öffnen AWT, Swing, JavaFX & SWT 2
J BackgroundJPanel passt sich dem JFrame nicht an AWT, Swing, JavaFX & SWT 7
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
K JFrame bei JUnit Tests AWT, Swing, JavaFX & SWT 2
G Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
JR2205 Swing JxMaps Einbindung Netbeans JFrame AWT, Swing, JavaFX & SWT 4
Zar von Domarus JFrame zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 3
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
M Limit für JFrame-Vergrößerung AWT, Swing, JavaFX & SWT 8
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
Ghostman1711 JFrame closing AWT, Swing, JavaFX & SWT 3
R Engineklasse mit JFrame AWT, Swing, JavaFX & SWT 4
M Default-WindowListener JFrame entfernen (Stichwort: iconified) AWT, Swing, JavaFX & SWT 4
ms_cikar Jframe zurück zu frame1 AWT, Swing, JavaFX & SWT 14
C Jframe ohne Rahmen AWT, Swing, JavaFX & SWT 3
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
A Swing JFrame neuzeichnen lassen, position neu berechnen lassen? AWT, Swing, JavaFX & SWT 9
R JFrame schließen AWT, Swing, JavaFX & SWT 9
P Swing JFrame minimiert sich bei Doppelklick auf die Titel-Leiste AWT, Swing, JavaFX & SWT 17
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
I JFrame an Bildschirm anpassen AWT, Swing, JavaFX & SWT 1
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
P JFrame schrumpft bei Doppelklick auf die Titelleiste AWT, Swing, JavaFX & SWT 0
G JFrame - manuell Größe verändern AWT, Swing, JavaFX & SWT 6
D JFrame mindestgröße erzwingen AWT, Swing, JavaFX & SWT 2
H Swing JFrame mit JFXPanel NPE bei dispose() AWT, Swing, JavaFX & SWT 6
C Swing Borderlayout im JFrame AWT, Swing, JavaFX & SWT 4
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
G Swing JFrame öffnen bei Pidgin Benachrichtigung AWT, Swing, JavaFX & SWT 5
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
S Kein JFrame unter Mac? AWT, Swing, JavaFX & SWT 8
G Resize JFrame AWT, Swing, JavaFX & SWT 8
J Teiltransparenter JFrame mit Blur-Effekt AWT, Swing, JavaFX & SWT 2
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
M NetBeans JFrame Grundlangen fragen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben