[JAVA] RadioButtons verversen na druk op knop

Pagina: 1
Acties:

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 11-03 09:53
Ik heb een vraagje..

Ik ben bezig met een vragen applet en ik zet mijn vraag in een Label en mijn antwoorden staan in Checkboxes aka RadioButtons dmv een CheckboxGroup()

De eerste vraag wordt getoond bij het opstarten van het applet en staat dus in de init()
nu heb ik ook een knop volgende op dat applet staan en als ik op de knop druk toont hij de volgende vraag en moet ook de antwoorden erbij komen maar dit werkt niet hieronder de code
die ik momenteel heb
ik probeer mijn Checkboxes te verwijderen door middel van remove()
en voeg ze dan volgens mij weer toe als ik de methode toon(vraagNr) aanroep.

Maar helaas werkt dit niet :( hij toont hem wel de eerste keer maar als ik dan op volgende druk krijg ik wel vraag te zien maar nooit meer de antwoorden ;(

Java:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package test;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.util.*;

public class Applet1 extends Applet
{
  int aantalAntwoorden;
  int vraagNr = 0;
  Label lblVraag;
  Checkbox[] ant;
  Vraag[] vraag;
  Button btnNext, btnBack;
  CheckboxGroup groep;
  Font f;

  public void init()
  {
    //Instellen van de achtergrond
    setBackground(new Color(255,255,153));

    //Instellen van de layout
    setLayout(new GridLayout(10,2,2,2));

    //Nieuwe CheckboxGroep aanmaken om de Checkboxes er te behandellen alsof ze RadioButtons zijn
    groep = new CheckboxGroup();

    //Nieuw Lettertype
    f = new Font("MonoSpaced", Font.BOLD, 13);

    //Hier wordt het Label om de vraag te tonen aangemaakt
    lblVraag = new Label();

    //Hier wordt de groote van de Array met vragen bepaald
    vraag = new Vraag[28];

    //Hier wordt het lettertype van het label vastgesteld
    lblVraag.setFont(f);


    /*****************************\
    | Vragen                      |
    \*****************************/
//    niet relevant


    /*****************************\
    | Antwoorden                  |
    \*****************************/
//    niet relevant

    //Methode aanroep met vraagnummer
    toon(vraagNr);

    //Knoppen toevoegen
    btnNext = new Button("Volgende");
    btnNext.addActionListener(new KnopHandler());
    btnBack = new Button("Vorige");
    btnBack.addActionListener(new KnopHandler());
    add(btnNext);
    add(btnBack);
  }
  
  void toon(int vraagNr)
  //Deze methode toont de bijbehorende vraag en antwoorden bij het vraagNr wat wordt opgegeven op het scherm
  {
    //Hier wordt de nieuwe tekst aan het Label lblVraag toegekend
    lblVraag.setText(vraag[vraagNr].getVraag());

    //Hier krijgt aantalAntwoorden de lengte van de ArrayList antwoorden behorende bij een bepaald vraagNr
    aantalAntwoorden = vraag[vraagNr].getAantalAntwoorden();

    //Definieren van een Array van Checkboxes met als aantal het hiervoor aangegeven aantalAntwoorden
    ant = new Checkbox[aantalAntwoorden];

    //Toevoegen van het Label lblVraag aan de Applet
    add(lblVraag);
    
    for(int i = 0; i < aantalAntwoorden; i++)
    //for lus om de Array van Checkboxes te vullen met alle antwoorden voor een bepaalde vraag en deze toe te voegen aan de Applet
    {
      ant[i] = new Checkbox(vraag[vraagNr].getAntwoord(i), groep, false);
      add(ant[i]);
    }

  }

  class KnopHandler implements ActionListener
  //Class KnopHandler wordt gebruikt om het klikken van de knoppen af te handellen
  {
    public void actionPerformed(ActionEvent e)
    {
      if(e.getSource()==btnNext)
        //
        //Try Catch toepassen op ExceptionArrayOutOfBounds
        //
        //if(vraag[vraagNr] != null)
        try
        {
          for (int i = 0; i < aantalAntwoorden; i++)
//            remove(ant[i]);
              ant[i] = null;

            //vraagNr wordt met 1 verhoogd
            if (vraagNr < vraag.length)
              vraagNr++;

          System.out.println(vraag[vraagNr].toString());
          //toon wordt opnieuw aangeroepen met een nieuwe waarde voor vraagNr wat dus de nieuwe vraag op het scherm zet
          toon(vraagNr);
        }
        catch(NullPointerException exp)
        {
          Label lbl = new Label("Fout!");
          add(lbl);
        }
        catch(ArrayIndexOutOfBoundsException exp)
          {
            Label lbl = new Label("Fout!");
            add(lbl);
          }

    }
  }
}

class Vraag
{
  private String vraag;
  private ArrayList antwoorden;
  private int isGoedeAntwoord;

  public Vraag(String vraag)
  //Constructor van de klasse vraag
  //String wordt meegegeven en opgeslagen in vraag
  //ook wordt hier de ArrayList antwoorden gedefinieerd
  {
    this.vraag = vraag;
    antwoorden = new ArrayList();
  }

  public String getVraag()
  //Geeft de vraag terug als string
  {
    return vraag;
  }

  public void addAntwoord(String antwoord, boolean goed)
   //een antwoord toevoegen aan deze vraag
   {
     //het antwoord wordt toegevoegd aan de ArrayList() antwoord
     this.antwoorden.add(antwoord);

     if(goed)
     //als goed TRUE is wordt de index in isGoedeAntwoord opgeslagen
         isGoedeAntwoord = this.antwoorden.size()-1;
   }

   public String getAntwoord(int index)
   //Geeft antwoord met het aangegeven index terug
   {
       return this.antwoorden.get(index).toString();
   }

   public int getAantalAntwoorden()
   //Geeft het aantal antwoorden in de ArrayList
   {
       return this.antwoorden.size();
   }

   public int getGoedeAntwoord()
   //Geef indexnummer terug van goede antwoord
   {
     return isGoedeAntwoord;
   }
}


sorry voor de grote hoeveelheid code
om deze 2 delen gaat het.

code van de knop
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
try
        {
          for (int i = 0; i < aantalAntwoorden; i++)
            remove(ant[i]);

            //vraagNr wordt met 1 verhoogd
            if (vraagNr < vraag.length)
              vraagNr++;

          System.out.println(vraag[vraagNr].toString());
          //toon wordt opnieuw aangeroepen met een nieuwe waarde voor vraagNr wat dus de nieuwe vraag op het scherm zet
          toon(vraagNr);
        }
        catch(NullPointerException exp)
        {
          Label lbl = new Label("Fout!");
          add(lbl);
        }
        catch(ArrayIndexOutOfBoundsException exp)
        {
          Label lbl = new Label("Fout!");
          add(lbl);
        }



deze code is van de methode toon(vraagNr)
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void toon(int vraagNr)
  //Deze methode toont de bijbehorende vraag en antwoorden bij het vraagNr wat wordt opgegeven op het scherm
  {
    //Hier wordt de nieuwe tekst aan het Label lblVraag toegekend
    lblVraag.setText(vraag[vraagNr].getVraag());

    //Hier krijgt aantalAntwoorden de lengte van de ArrayList antwoorden behorende bij een bepaald vraagNr
    aantalAntwoorden = vraag[vraagNr].getAantalAntwoorden();

    //Definieren van een Array van Checkboxes met als aantal het hiervoor aangegeven aantalAntwoorden
    ant = new Checkbox[aantalAntwoorden];

    //Toevoegen van het Label lblVraag aan de Applet
    add(lblVraag);
    
    for(int i = 0; i < aantalAntwoorden; i++)
    //for lus om de Array van Checkboxes te vullen met alle antwoorden voor een bepaalde vraag en deze toe te voegen aan de Applet
    {
      ant[i] = new Checkbox(vraag[vraagNr].getAntwoord(i), groep, false);
      add(ant[i]);
    }

  }

iRacing Profiel


  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 11-03 09:53
Nog even een schopje.

iRacing Profiel


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Probeer na all je add aanroepen eens de repaint methode aan te roepen. Ik weet niet of het automatisch gaat, maar ik weet met Swing (die weer dingen gebruikt uit awt, waar ook applets gebruik van maken) dat je voor bepaalde veranderingen in je Panel je moet aangeven dat hij moet repainten.

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 11-03 09:53
Ja dat is op zich een idee maar dat gaat hier helaas niet om omdat er nergens de methode paint() staat dus heeft geen zin toch bedankt iig

iRacing Profiel


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 15:42
De methode validate() van het contentpane aanroepen nadat je component properties hebt gewijzigd of components verwijderd / toegevoegd hebt.
En in vredesnaam GEEN awt en swing components door elkaar gebruiken, want dat is vragen om problemen.

[ Voor 73% gewijzigd door Kwistnix op 10-12-2004 22:45 ]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
jvaneijk schreef op vrijdag 10 december 2004 @ 22:27:
Ja dat is op zich een idee maar dat gaat hier helaas niet om omdat er nergens de methode paint() staat dus heeft geen zin toch bedankt iig
Hmm, ooit wel eens van overerving gehoord? Zoek in de java API documentatie de Applet eens op en kijk vervolgens welke parent objecten deze allemaal heeft. Ik durf te wedden dat je er tenminste een tegenkomt die de methode repaint() heeft.
Overigens heeft FallenAngel666 de methode gevonden die ik eigenlijk bedoelde.
Pagina: 1