Avatar billede kkaen Nybegynder
01. november 2010 - 10:27 Der er 3 kommentarer og
1 løsning

Swing: load project

Jeg har en Swing-applikation i Netbeans 6.9, hvori jeg er ved at konstruere en "load project"-funktion.
Et projekt er gemt i en dat-fil, som jeg indlæser i programmet (med succes). Når de læste data så skal omsættes til noget visuelt, går det galt - så sker der ikke rigtig noget andet at alle komponenterne forsvinder.

Projektet er opbygget således:

Form StandaloneJFrame
->Other components
->[JFrame]
-->jPanel1
--->jLayeredPane
---->jPanel
----->Alle mine komponenter
---->jLabel12

jLabel12 kan dynamisk flyttes rundt på skærmen, hvorfor den står for sig selv under jLayeredPane (det ligger i DRAG_LAYER).

Jeg har forsøgt med forskellige tilgange for at løse problemet. Bl.a.:
a)
Frame[] a= StandaloneJFrame.getFrames();
a[0].validate();
virker ikke

b)
initComponents();
virker ikke

c)
super.invalidate();
super.validate();
virker ikke

d)
jLabel12.invalidate();
jLabel12.validate();
virker ikke. Men når musen bevæges hen over nogle af komponenterne, bliver disse pludselig renderet.

e)
invalidate();
validate();
virker ikke

f)
jLabel1.validate();
jLabel12.validate();
viker ikke

g)
jLayeredPane2.setVisible(true);
jLayeredPane2.repaint();
virker ikke

h)
Graphics g=this.getGraphics();
super.paintComponents(g);
virker ikke

i)
((JComponent)getContentPane()).revalidate();
virker ikke

j)
this.getContentPane().invalidate();
this.getContentPane().validate();
virker ikke

k)
jLabel12.setBounds(710, 365, 28, 28);
virker for det ene komponent. Skal dette så gøres for alle komponenter? Det virker noget omsonst, og der er garanteret en smartere måde, at opnå det ønskede på. Derfor dette spørgsmål :-)

(som det nok kan ses, har jeg forsøgt at løse problemet med spredehagl, men jeg mangler stadig at se lyset...)
Avatar billede kkaen Nybegynder
01. november 2010 - 10:51 #1
UPDATE:
Forresten har jeg fundet input k) her:
http://forums.sun.com/thread.jspa?threadID=444447
Registered: 6/3/98

- JLayeredPane doesn't have a default layout manager (layout manager is null) . This means you have to explicitly set the size and location of its components. Otherwise, it won't paint. You can use the method setBounds(x,y,width,height).
Avatar billede kkaen Nybegynder
01. november 2010 - 13:50 #2
Yey, nu kan jeg godt få nogle elementer renderet. Det viste sig, at jeg fyrede "jLayeredPane2.invalidate" af inde i løkken. Så flyttede jeg den udenfor løkken, og så opførste det sig pludselig som forventet.

Næste skridt bliver så at få buttonClicket til at virke på de labels, der bliver genereret ud fra loadProject()...
Avatar billede kkaen Nybegynder
01. november 2010 - 14:54 #3
...der sætter man naturligvis bare en ny listener på labellen. Jeg gik egentlig ud fra, at sådan nogle ting blev gemt, når objekterne blev gemt i en fil, og derfor også ville blive genskabt, når filen læses igen, og de grafisk renderes bagefter...?
Avatar billede kkaen Nybegynder
30. december 2010 - 15:49 #4
Lukkes.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester