[JAVA] Probleem met comboboxen uitlezen.

Pagina: 1
Acties:

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Hallo,

Ik ben bezig met een frame waar op 4 comboboxen zitten, 1 textarea en 2 knoppen (ok en cancel).

Nou wil ik dat als je op ok klikt de inhoud die je geselecteerd hebt in de comboboxen uitlezen en bijvoorbeeld in de textarea plaatsen.

Nou heb ik een stuk code die alleen de data die in de combobox geselecteerd staat bij het opbouwen van het frame naar de textarea kopieert, en dus als je wat anders selecteerd gewoon dat oude er weer in komt.

Nou las ik dat je gebruik moest maken van event en innerclasses op de tutorial van sun en heb daardoor het volgende gemaakt dat het bovenstaande probleem heeft:

Stukje code van de combobox + actionevent voor de ok knop

code:
1
2
3
4
5
6
7
JTextArea txt = new JTextArea(25,25);
JLabel lbCat3 = new JLabel("Voer klasse in");
    String[] klasse = {"A", "B", "C"};
    JComboBox cbCat3 = new JComboBox(klasse);

    JButton btnOK = new JButton("OK");
    btnOK.addActionListener(new geefRanglijst((String)cbKamp.getSelectedItem(), (String)cbCat1.getSelectedItem(), (String)cbCat2.getSelectedItem(), (String)cbCat3.getSelectedItem(), txt));


en dan onderaan de innerclass:

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
class geefRanglijst implements ActionListener{
    
    private String jaar, geslacht, leeftijdCat, klasse = "" ;
    JTextArea mytxt = "";
    
    public geefRanglijst(String hetJaar, String hetGeslacht, String deLeeftijdCat, String deKlasse, JTextArea txt){
    
    mytxt = txt;
    jaar = hetJaar;
    geslacht = hetGeslacht;
    leeftijdCat = deLeeftijdCat;
    klasse = deKlasse;
    
    }
    
    public void actionPerformed(ActionEvent e){
        
        mytxt.append("Nou zou er een ranglijst moeten komen van het volgende kampioenschap: \n" + "Jaar: " + 
        jaar + "\n" + "Geslacht: " + geslacht + "\n" + "Leeftijdscategorie: " + leeftijdCat + "\n" + 
        "Klasse: " + klasse + "\n\n");
}
        
    
}


Weet iemand nou waarom hij alleen die data van het opbouwen geeft en niet elke keer kijkt wat er op het moment van drukken op ok er in de comboboxen staat?

alvast bedankt

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Ik zou zeggen, lees je code nog eens goed na en kijk stap voor stap wat er gebeurd. Dan kom je er vast wel uit...

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je verwacht toch niet dat als je dit meegeeft dat de listener dan steeds de meeste recente waarde kent?

Java:
1
(String)cbKamp.getSelectedItem()


Je moet modellen meegeven aan de listeners, niet de waarden uit de modellen.

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


  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
dus gewoon de combobox meegeven?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

eppie schreef op 07 January 2003 @ 20:59:
dus gewoon de combobox meegeven?
In Swing wordt over het algemeen gewerkt met modellen. Voor een table heb je een tablemodel, voor een tree heb je een treemodel (die naar mijn mening hard zuigt) en voor een combobox heb je een comboboxmodel. Hierdoor kan je je conctreren op de logica van een bepaalde view zonder dat je je meteen druk hoeft te maken om de visualisatie ervan.

Swing modellen zijn eigelijk view modellen. En verder zou ik me eerst even *ahum* verdiepen in mvc (model view controller).

  • daaf258
  • Registratie: Maart 2002
  • Laatst online: 18-08 13:40

daaf258

For Aiur

Waarom maak je van die ActionListener een class?
Je kan toch ook gewoon de actionlistener in de Public Class gooien.

bijv.
Java:
1
2
3
4
5
6
7
JTextArea txt = new JTextArea(25,25);
JLabel lbCat3 = new JLabel("Voer klasse in");
    String[] klasse = {"A", "B", "C"};
    JComboBox cbCat3 = new JComboBox(klasse);

    JButton btnOK = new JButton("OK");
    btnOK.addActionListener(this);

en dan de actionPerformed

Java:
1
2
3
4
public void actionPerformed(ActionEvent e)
  {
   txt.append(cbCat3.getSelectedItem()+"\n" + cbCat1.getSelectedItem() +"\n"+ Enz.);
  }

mijns inziens, kheb nog niet zolang ervaring met Java dus...
edit:

dus dat blijkt maar weer ;)

[ Voor 27% gewijzigd door daaf258 op 08-01-2003 21:38 ]

- specs - audioscrobbler -


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

daaf258 schreef op 08 January 2003 @ 19:02:
Waarom maak je van die ActionListener een class?
Je kan toch ook gewoon de actionlistener in de Public Class gooien.

bijv.
Java:
1
2
3
4
5
6
7
JTextArea txt = new JTextArea(25,25);
JLabel lbCat3 = new JLabel("Voer klasse in");
    String[] klasse = {"A", "B", "C"};
    JComboBox cbCat3 = new JComboBox(klasse);

    JButton btnOK = new JButton("OK");
    btnOK.addActionListener(this);

en dan de actionPerformed

Java:
1
2
3
4
public void actionPerformed(ActionEvent e)
  {
   txt.append(cbCat3.getSelectedItem()+"\n" + cbCat1.getSelectedItem() +"\n"+ Enz.);
  }

mijns inziens, kheb nog niet zolang ervaring met Java dus...
Eigelijk.. eigelijk... eigelijk is dit de allerslechtste aanpak die je maar kan bedenken ;)

Je moet nooit een action listener maken en die alle acties laten afvangen. Hierdoor moet je achteraf weer uitzoeken waar het event vandaan is gekomen en hierdoor breng je onnodige complexiteit in het programma. Je kan veel beter een actionlistener per actionsender implementeren. En je kan zelfs nog beter gebruik maken van Actions ipv ActionListeners.

  • reskobon
  • Registratie: November 2001
  • Laatst online: 14-08 22:26
Alarmnummer schreef op 08 januari 2003 @ 20:16:
[...]

Eigelijk.. eigelijk... eigelijk is dit de allerslechtste aanpak die je maar kan bedenken ;)

Je moet nooit een action listener maken en die alle acties laten afvangen. Hierdoor moet je achteraf weer uitzoeken waar het event vandaan is gekomen en hierdoor breng je onnodige complexiteit in het programma. Je kan veel beter een actionlistener per actionsender implementeren. En je kan zelfs nog beter gebruik maken van Actions ipv ActionListeners.
Humm dat verhaal ken ik ook ja maar waarom staat het dan in elk beginners javaboek op die manier zoals hierboven dus met 1 actionlistener die alles afvangt?

Leeg


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Simpel. Dat is vaak simpeler, overzichtelijker en korter... (in een boek dan he, je uiteindelijk code is vanuit OO-perspectief niet zo mooi).

[ Voor 41% gewijzigd door SWfreak op 08-01-2003 23:04 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

reskobon schreef op 08 January 2003 @ 22:59:
[...]


Humm dat verhaal ken ik ook ja maar waarom staat het dan in elk beginners javaboek op die manier zoals hierboven dus met 1 actionlistener die alles afvangt?
Zie SWfreak

En als je gaat werken met een action listener per button, dan kom je al snel in aanraking met lastige concepten zoals innerclasses. Misschien had er beter bij kunnen staan: wat hier staat klopt niet ;)

[ Voor 3% gewijzigd door Alarmnummer op 09-01-2003 09:31 ]


  • reskobon
  • Registratie: November 2001
  • Laatst online: 14-08 22:26
Alarmnummer schreef op 09 January 2003 @ 09:30:
[...]

Zie SWfreak

En als je gaat werken met een action listener per button, dan kom je al snel in aanraking met lastige concepten zoals innerclasses. Misschien had er beter bij kunnen staan: wat hier staat klopt niet ;)
Innerclasses zijn nou idd niet handig als je net met java begint. Ik programmeer nu toch al even in java maar gebruik nog altijd die manier hoor. Werkt prima maar meestal wordt de methode actionPerformed wat groot en onoverzichtelijk.

Leeg


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

reskobon schreef op 09 januari 2003 @ 09:58:
[...]


Innerclasses zijn nou idd niet handig als je net met java begint. Ik programmeer nu toch al even in java maar gebruik nog altijd die manier hoor. Werkt prima maar meestal wordt de methode actionPerformed wat groot en onoverzichtelijk.
Als je toch al een tijdje in java progt, en je weet wat een innerclass is, dan kan je echt het beste overgaan op een actionlistener per button. Eigelijk is dit niet helemaal correct, want je kan natuurlijk ook dezelfde actionlistener gebruiken voor verschillende buttons. bv een save toolbarbutton en een save menuitem. Hierdoor heb je dezelfde functionaliteit aan die buttons gekoppeld zonder dat je er zelf nog naar hoeft om te kijken. En als je toch bezig bent met actionlisteners per button, dan zou ik ook meteen even kijken naar de Action class. Zie het als een actionlistener on steroids :)

  • reskobon
  • Registratie: November 2001
  • Laatst online: 14-08 22:26
Alarmnummer schreef op 09 January 2003 @ 10:11:
[...]


Als je toch al een tijdje in java progt, en je weet wat een innerclass is, dan kan je echt het beste overgaan op een actionlistener per button. Eigelijk is dit niet helemaal correct, want je kan natuurlijk ook dezelfde actionlistener gebruiken voor verschillende buttons. bv een save toolbarbutton en een save menuitem. Hierdoor heb je dezelfde functionaliteit aan die buttons gekoppeld zonder dat je er zelf nog naar hoeft om te kijken. En als je toch bezig bent met actionlisteners per button, dan zou ik ook meteen even kijken naar de Action class. Zie het als een actionlistener on steroids :)
Ga ik voortaan doen dan! Zal idd eens in de API's gaan kijken van de Action class en subclasses, bedankt :)

Leeg

Pagina: 1