[Java] Probleem met JComponet.add() en remove()

Pagina: 1
Acties:

  • metaal
  • Registratie: Juli 2001
  • Laatst online: 31-01-2025
Ik wil een scherm als volgt maken:
code:
1
2
3
4
5
6
7
8
9
+++++++++++++++++++++++++++++++++++++++++++++
+     (0) Optie1      (0) Optie2     +
+++++++++++++++++++++++++++++++++++++++++++++
+                            +
+                            +
+           HoofdPanel           +
+         (Borderlayout)           +
+                            +
+++++++++++++++++++++++++++++++++++++++++++++

(Optie1 en Optie2 zijn radiobuttons)

Nu heb ik nog twee andere panels gemaakt, laten we zeggen Panel1 en Panel2, waarop knoppen enzo staat. Nu wil ik dus als je op Optie1 klikt, dat je Panel1 te zien krijg, en als je op Optie2 klikt, Panel2 te zien krijgt.

Nu probeerde ik de volgende code uit:

actionPerformed voor Optie1:
code:
1
2
3
4
{
  hoofdPanel.removeAll();
  hoofdPanel.add(panel1);
}

actionPerformed voor Optie2:
code:
1
2
3
4
{
  hoofdPanel.removeAll();
  hoofdPanel.add(panel2);
}

Dit werkt op een of andere manier voor geen meter. De actionPerformed methodes worden wel uitgevoerd, daar heb ik op getest. Ik heb ook wat lopen rommelen met validate(), maar dat haalt weinig uit. Ook getRootPane().add ipv .add werruktnie :'(... Iemand :?.... ik ben hopeloos.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
metaal: Nu heb ik nog twee andere panels gemaakt, laten we zeggen Panel1 en Panel2, waarop knoppen enzo staat. Nu wil ik dus als je op Optie1 klikt, dat je Panel1 te zien krijg, en als je op Optie2 klikt, Panel2 te zien krijgt.
Dit kan je veeeel beter met een java.awt.CardLayout doen denk ik :) . Kijk daar maar eens naar in de Java API docs en je wordt blij ;) .
A CardLayout object is a layout manager for a container. It treats each component in the container as a card. Only one card is visible at a time, and the container acts as a stack of cards. The first component added to a CardLayout object is the visible component when the container is first displayed.
Waarom je code op deze manier niet werkt is mij niet direct duidelijk zonder meer code...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • metaal
  • Registratie: Juli 2001
  • Laatst online: 31-01-2025
Waarom je code op deze manier niet werkt is mij niet direct duidelijk zonder meer code...
Dit is in princiepe het enige stukje belangrijke code. Voor de rest staat er nixx anders dan panel1 = new PanelBLalabla() en this.add(hoofdPanel) en dat soort geblaat. Ik heb het ff snel inmekaar gesleept met JBuilder3, en ik heb de zaak getjekt. Reken maar dat dat wel goed zit.

Het probleem is dat ik een panel niet te zien krijg als ik hem runtime toe voeg aan een ander panel. Ik had dit probleem misschien wel kunnen voorleggen zonder code. Misschien zijn er mensen die weten of ik methodes als validate() moet aanroepen om het scherm te "refreshen".

Maar in iedergeval bedankt voor je tip over CardLayout. Dacht dat dat een andere functionaliteit had, maar dat ding is dus handiger dan ik dacht :7. Tnx

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Kijk trouwens eens hier voor uitstekend CardLayout voorbeeld wat veel overeenkomt met jouw probleem

http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html
metaal: Het probleem is dat ik een panel niet te zien krijg als ik hem runtime toe voeg aan een ander panel. Ik had dit probleem misschien wel kunnen voorleggen zonder code. Misschien zijn er mensen die weten of ik methodes als validate() moet aanroepen om het scherm te "refreshen".
Hum ja, ik heb dit vroeger weleens gedaan, maar volgens mij leverde dat toen geen problemen op...validate hoef je in princope niet aan te roepen dacht ik omdat de LayoutManager gelijk wordt toegepast als de componenten veranderen. Probeer het uit zou ik zeggen :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • metaal
  • Registratie: Juli 2001
  • Laatst online: 31-01-2025
Op vrijdag 18 januari 2002 11:57 schreef mbravenboer het volgende:

...

...validate hoef je in princope niet aan te roepen dacht ik omdat de LayoutManager gelijk wordt toegepast als de componenten veranderen. Probeer het uit zou ik zeggen :) .
Ik schreef:
...

Ik heb ook wat lopen rommelen met validate(), maar dat haalt weinig uit. Ook getRootPane().add ipv .add werruktnie ... Iemand .... ik ben hopeloos.
Oftewel, al gedaan. Ook invalidate() al aangeroepen. Helpt niet :'(