Swing: GUI componenten niet goed zichtbaar tot redraw

Pagina: 1
Acties:

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Hoi


Ik heb een basale gui gemaakt in swing (voor het eerst, altijd AWT gehad).
Dit is een derivaat van een JInternalFrame.


Echter rendert dit voor geen meter qua controls (labels niet zichtbaar en paar textfields) tot ik een ander venster hieroverheen schuif en weer wegschuif.
Dat veroorzaakt dus een of andere redraw.

Hoe doe ik dat echter netjes vanuit de code?

In de constructor van mijn klasse wordt de contrctur van JInternalFrame aangeroepen.
Vervolgens een functie om de GUI te initialiseren en dan this.show in de constructor.

De klasse heeft een content Container waar alle JLabels en JTextFrames aan worden geadd.

Wat heb ik zelf gedaan?

Gespeeld met validate, show, pack, unpack en repaint.

Gezocht, en gevonden:

[Java]Jframe laat Panel pas zien na resize, wat doe ik fout?
http://forum.java.sun.com...5202037&messageID=9804740

En nog wat meer van dat soort threads.
Geen soelaas helaas.


Hoe kan ik dit het beste oplossen?

  • bat266
  • Registratie: Februari 2004
  • Laatst online: 04-01 07:44
Bij mij heeft doLayout() ook wel eens gewerkt. Revalidate en invalidate zie ik hierboven niet staan maar denk dat je dat wel geprobeerd hebt. Als dit niet werkt denk ik dat enige concrete code misschien kan helpen.

Better to remain silent and be thought a fool then to speak out and remove all doubt.


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Heb je ze wel aan het rootPane van het JInternalFrame toegevoegd?

Heb je trouwens goede redenen een JInternalFrame te gebruiken in plaats van een JFrame?

Wie trösten wir uns, die Mörder aller Mörder?


  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
bat266: zeker ook geprobeerd staat in die links hierboven.
Code heb ik bewust niet toegevoegd ivm scriptrequest :).


@Confusion: rootPane; ga zo even kijken.
JInternalFrame; ja. Ik heb 1 'desktop' frame met meerdere internals erin.
Deze tutorial heb ik uitgebouwd:
http://72.5.124.55/docs/b...onents/internalframe.html

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 17-01 00:50
Ik weet niet zeker, maar begrijp ik nu goed dat je je UI realized in je constructor?

Probeer eens de frame te construeren en dan na de constructor call show aan te roepen.

(Lang geleden dat ik Swing geprogged heb trouwens.)

Ja volgens mij is het niet goed om in de constructor van een frame het ding ook te showen. Beter nadat je de constructor volledig uitgevoerd hebt de gui te realiseren.

Kijk hier voor inspiratie:
http://java.sun.com/docs/...onents/internalframe.html
http://java.sun.com/docs/...ts/InternalFrameDemo.java

In dat voorbeeld wordt ook een internal frame toegevoegd aan een frame. Echter de main method roept een methode aan die eerst de UI samensteld en pas als dat gebeurt is wordt de call frame.setVisible(true); aangeroepen.

Overigens is de show call deprecated sinds JDK 5. Je kunt beter frame.setVisible(true) gebruiken.

[ Voor 65% gewijzigd door The - DDD op 30-05-2008 09:51 ]


  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Nee ik maak alle buttons etc netjes aan in een functie die in de constructor wordt gecalled.
Daarna zal het parent frame (dat dus de constructor aangeroepen heeft) de show functie draaien.

Die internalframe demo heb ik hierboven gelinkt ;).

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 17-01 00:50
Ja, maar die call naar je internal gebeurt vanuit de constructor van je omliggende frame.. Dat zeg je in je openingspost...
Boudewijn schreef op vrijdag 30 mei 2008 @ 03:04:
...
In de constructor van mijn klasse wordt de contrctur van JInternalFrame aangeroepen.
Vervolgens een functie om de GUI te initialiseren en dan this.show in de constructor.
...
Althans... het klinkt sowieso een beetje vaag allemaal... Worden de components van de internal frame aan de container van je klasse toegevoegd?

Het gedrag wat je ziet is het gevolg dat je iets doet op een moment of een plek waar het niet de bedoeling is.

[ Voor 23% gewijzigd door The - DDD op 30-05-2008 10:28 ]


  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Gebeurt het creeëren en tonen van dat Frame wel op de eventthread?

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Ik heb met mijn duffe kop mijn code niet ingecheckt thuis.
net even een demo geschreven met 1 knop en daar gaat het wel goed.

* Boudewijn gaat straks "zoek de verschillen" spelen ;).

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10-2025
this.show() is al een hele tijd depricated (dacht al sinds 1.4) probeer is this.setVisible(true);

(waarschijnlijk geeft je IDE ook een depricated waarschuwing op this.show() toch?)

Anyway dan zou het (beter) moeten werken. Maar ik weet niet zeker of je probleem hier door komt.

Edit: te laat, beter topic doorlezen eerst (het stond zo sneaky achterin iemands anders post)

[ Voor 14% gewijzigd door roy-t op 30-05-2008 11:45 ]

~ Mijn prog blog!


  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Ook al geprobeerd, maakte geen verschil.
het is idd deprecated, dus ook al aangepast, alleen niet echt gemeld ^^.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 11:37
show() van JInternalFrame is niet deprecated, show() van Component is deprecated, en drie keer raden wat setVisible(boolean) op de achtergrond doet... Ik zou het probleem hier niet in zoeken.

Roomba E5 te koop

Pagina: 1