[JAVA]gebruik van Swing geeft error bij toevoegen knop

Pagina: 1
Acties:

  • degroot
  • Registratie: December 2003
  • Niet online
Hallo,

Ik ben al een tijdje bezig met JAVA aan het leren
Nu ben ik bij de GUI aangekomen....
Dit deed ik eerst zonder swing , hier stond ook verder niets over in mijn eerste boek(en dan is er....JAVA)
Nu heb ik een extra boek(JavaT All-in-One Desk Reference For Dummies) , omdat daar wat meer instaat over de GUI , en deze gebruiken Swing ipv de java.awt.*; zoals ik het uit mijn eerste boek geleerd heb

Nu wil ik heel graag met swing straks gaan werken , dus wil me hier erg graag in verdiepen...Alleen ik heb al redelijk wat internet site's afgestruint , want in het boek kom ik niet meer verder....

Als ik een simpele frame maak dmv onderstaande code , dus zonder knoppen oid dan is er niks aan de hand.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import javax.swing.*;

public class test extends JFrame
{
    public static void main(String[] args)
    {
        new test();
    }
       
    public test()
    {                
        this.setSize(400,400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Java Swing App");        
        this.setVisible(true);
    }
}


Maar ik loop nu al een paar dagen vast op het toevoegen van een simpele knop aan dit venster.
Ik kom er maar niet aan uit omdat ik steeds een error krijg , en dit is toch gewoon een voorbeeldje uit een dummy boek.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import javax.swing.*;

public class test extends JFrame
{
    public static void main(String[] args)
    {
        new test();
    }
    private JButton knoppiej;
    
    public test()
    {
        JPanel framepiej = new JPanel();
        knoppiej = new JButton("Klik Me!");
                
        this.setSize(400,400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Java Swing App");
        this.setVisible(true);
        
        add(framepiej);
        framepiej.add(knoppiej);
        
        this.setVisible(true);
    }
}

Dit produceert in mijn IDE(NetBeans) een error
En een vrij ingewikkelde namelijk:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
java.lang.Error: Do not use test.add() use test.getContentPane().add() instead

        at javax.swing.JFrame.createRootPaneException(JFrame.java:465)

        at javax.swing.JFrame.addImpl(JFrame.java:491)

        at java.awt.Container.add(Container.java:307)

        at test.<init>(test.java:21)

        at test.main(test.java:7)

Exception in thread "main" 

BUILD SUCCESSFUL (total time: 2 seconds)


Ik krijg wel gewoon een venster te zien , maar dus niet de toegevoegde knop.
Zette zij mij op het verkeerde spoor ? of zie ik gewoon iets over het hoofd?
Hopelijk kunnen jullie mij weer een beetje opweg helpen...word nu een beetje para van heel het swing gebeuren...en wil het toch heel graag leren

Gr
Nick

www.degroot-it.nl


  • DroogKloot
  • Registratie: Februari 2001
  • Niet online

DroogKloot

depenisvanjezus

JComponents moet je toevoegen aan de container (contentPane) van een frame, niet aan het frame zelf.

Verwijderd

Do not use test.add() use test.getContentPane().add() instead

:z

  • Cloud
  • Registratie: November 2001
  • Laatst online: 18-02 09:57

Cloud

FP ProMod

Ex-moderatie mobster

Zoals mijn collega's hierboven ook al zeggen, kun je in Java geen componenten simpelweg op de form mikken. Dit kan alleen door de contentPane op te vragen en daar de componenten aan toe te voegen.

Als je misschien met andere talen gewerkt hebt hiervoor, kan dit wat verwarrend zijn. Maargoed. :) Dus de error is helemaal niet zo gek, want er staat precies wat je moet doen :+ Kan m.i. niet duidelijker. Ach nu weet je t ;)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • degroot
  • Registratie: December 2003
  • Niet online
DroogKloot schreef op donderdag 04 mei 2006 @ 19:15:
JComponents moet je toevoegen aan de container (contentPane) van een frame, niet aan het frame zelf.
Sorry maar dit snap ik niet helemaal
Ben pas begonnen met JAVA , en met Swing ben ik al helemaal nog niet bekend...Zou je miss iets meer uitleg kunnen geven :+
wolkje schreef op donderdag 04 mei 2006 @ 19:20:
Zoals mijn collega's hierboven ook al zeggen, kun je in Java geen componenten simpelweg op de form mikken. Dit kan alleen door de contentPane op te vragen en daar de componenten aan toe te voegen.

Als je misschien met andere talen gewerkt hebt hiervoor, kan dit wat verwarrend zijn. Maargoed. :) Dus de error is helemaal niet zo gek, want er staat precies wat je moet doen :+ Kan m.i. niet duidelijker. Ach nu weet je t ;)
Ik ben Alleen nog maar gewend om in PHP te programmeren , dus ik heb verder nog niet echte programmeer ervaring...
De error zal inderdaad niet zo gek zijn , maar ik snap hem niet helemaal haha, maar in het boek kan ik niks over getContentPane terugvinden...... :o
Verwijderd schreef op donderdag 04 mei 2006 @ 19:17:
Do not use test.add() use test.getContentPane().add() instead

:z
Deze gooi ik ff in de google zoekmachine(volgens mij eergister al eens gedaan zonder resultaat)


EDIT
Ik moet dus , als ik het goed begrijp , de regel add(framepiej) vervangen door test.getContentPane().add(framepiej); ??

Ik had dus test. voor getContentPane weg moeten laten :o

Kan iemand mij helder maken waarom getContentPane erbij moet , en dit nergens in heel het boek is terug te vinden??
Tis nog wel een FOR DUMMIES boek....haha nouja het werkt iig

[ Voor 76% gewijzigd door degroot op 04-05-2006 19:28 ]

www.degroot-it.nl


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 18:46
Dat komt omdat JFrame zelf een ContentPane heeft waarop je componenten thuishoren. JFrame zelf bevat (in principe) zelf niets meer dan een titelbalk en een ContentPane.

Gewoon add() werkt trouwens wel in Java 1.5.0 (omdat JFrame dat zelf doorstuurt naar zijn ContentPane), maar in de oude Java 1.4.2 werkt het niet.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-02 07:12

Nick_S

++?????++ Out of Cheese Error

degroot schreef op donderdag 04 mei 2006 @ 19:20:
Kan iemand mij helder maken waarom getContentPane erbij moet , en dit nergens in heel het boek is terug te vinden??
Tis nog wel een FOR DUMMIES boek....haha nouja het werkt iig
Ik denk dat de heren bij Sun je dat wel duidelijk kunnen maken. Using Top-Level Containers.

Verder heeft Sun een goede Java tutorial en daarin een Swing tutorial. Ook de Java API is onmisbaar bij het programmeren. (Voor diegene met code completion en uitleg daarbij, dat is ook de API ;))

Ik ben er even van uit gegaan dat je 1.4.2 gebruikt, ik denk dat je de Java API 5.0 zelf wel moet kunnen vinden.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 18-02 10:22

NetForce1

(inspiratie == 0) -> true

Sinds java 1.5 is getContentPane() niet meer nodig. JFrame.add() is nu een doorport naar getContentPane().add().
offtopic:
Spuit 11, voortaan eerst refreshen voor je post pino!

[ Voor 24% gewijzigd door NetForce1 op 04-05-2006 20:26 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"

Pagina: 1