Avatar billede newme Nybegynder
18. december 2003 - 17:01 Der er 17 kommentarer

Checkboxes, ItemListener og ActionListener

I min ene GUI-klasse har jeg en knap "Næste". Dertil er der tilknyttet en actionListener. Når knappen aktiveres, skal hver checkbox tjekkes for, om den er vinget af. Men de har hver især tilknyttet en ItenListener. Problemet er, at jeg ikke kan finde ud af samspillet mellem de to typer listeners. Skal det hele være under actionPerformed() eller itemChanged()? Her er koden:
public void actionPerformed(ActionEvent ae)
    {

        if(ae.getSource() == EMail)

        {
                JOptionPane.showMessageDialog(this,

                "Denne funktion er blackboxet","Error Message",

                JOptionPane.ERROR_MESSAGE);

        }

        if(ae.getSource() == Print)

        {

                JOptionPane.showMessageDialog(this,

                "Denne funktion er blackboxet","Error Message",

                JOptionPane.ERROR_MESSAGE);

        }
        if(ae.getSource() == Afslut)
        {
                //hvad skal der gemmes og hvor?
                //mp3Player.gemMP3();
                System.exit(0);

        }
       
        if(ae.getSource() == bestillingsdatoField1)
        {
            dato.insertElementAt(bestillingsdatoField1.getText(),0);
        }
       
        if(ae.getSource() == deadlinedatoField)
        {
            dato.insertElementAt(deadlinedatoField.getText(),1);
        }
       
    }
   
   
    /**
    * Method itemStateChanged()
    * @param ItemEvent ie
    */

    public void itemStateChanged(ItemEvent ie)
    {

        Vector ressourcer = new Vector();

          if(ie.getSource() == Naeste)       

            {

            boolean b1 = MøderForberedelse.getState();

            if (b1 = true)

            {

                ressourcer.addElement(MøderForberedelse.getName());           

            }
...

boolean b27 = Andet.getState();

            if (b27 = true)
            {
                ressourcer.addElement(Andet.getName());     
            }                 
               
        }

            ressourceforbrugGUI.datoer(dato);
            ressourceforbrugGUI.ressourcerTilBeregning(ressourcer);

            ressourceforbrugGUI = new RessourceforbrugGUIJInternalFrames();

            dispose();     

    }
Avatar billede agrezz Nybegynder
18. december 2003 - 17:04 #1
hvis det er fordi du skal finde ud af om man har trykket på din radio buttons så bare lav en boolean instant som sættes ved tryk...?
Avatar billede agrezz Nybegynder
18. december 2003 - 17:05 #2
der må da findes et kald til en radio button, som fortæller om den er checked eller unchecked :)
Avatar billede _carsten Nybegynder
18. december 2003 - 17:49 #3
Hvis det er en JCheckBox du vil checke kan du bruge metoden

System.out.println( minJCheckBox.isSelected() );    udskriver true/false
Avatar billede _carsten Nybegynder
18. december 2003 - 17:52 #4
Hvis der skal ske en handling når CheckBox'en vælges/fravælges er det nok nemmest at gøre det i actionPerformed

import java.awt.event.*;

      minJCheckBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                System.out.println( minJCheckBox.isSelected() );
            }
        });
Avatar billede labanos Nybegynder
19. december 2003 - 08:43 #5
bare lige for at spørge... men har du har vel kun en itemstatelistener på dine checkboxes og ikke din "næste" knap?

if(ie.getSource() == Naeste)       

            {

            boolean b1 = MøderForberedelse.getState();

            if (b1 = true)

            {

                ressourcer.addElement(MøderForberedelse.getName());           

            }
ovenstående sker vel aldrig...

hvis du smider alle dine checkboxes i et array, og laver en simpel forløkke som:

JCheckBox[] checks = new JCheckBox[]{EMail, Print, Afslut};
for(int i = 0;i<checks.length;i++) {
  if (checks[i].isSelected()) {
    //if i = blah, gør noget if = noget andet blah gør noget andet
  }
}

Groft sagt bør du ikke bruge itemstatelisteners, medmindre du ret faktisk ønsker at gøre noget når det sker.. buttons hænger sammen med actionlisteners medmindre du har en meget speciel situation.. Jeg går lidt ud fra at du vil have at man trykker på næste før der overhovedet skal ske noget?..
Avatar billede _carsten Nybegynder
19. december 2003 - 09:10 #6
>> labanos

1. Hvad mener du med at "ovenstående sker vel aldrig", det sker vel hvis
  udtrykket er sandt.

2. Der er ikke noget der hedder itemstatelisteners

3. Der er noget som hedder ItemListener og groft sagt bruger man dem når
  situationen kræver det.

4. Buttons hænger ikke kun sammen med actionListeners, uanset situationen

5. At lave en for løkke af JCheckBox er dobbelt konfekt, der skal jo ske noget
  forskelligt altafhængig af hvilken der er valgt, derfor en simpel if den
  bedste og mest simple i situationen - du slipper jo den if alligevel
Avatar billede _carsten Nybegynder
19. december 2003 - 09:11 #7
Rettelse: du slipper jo den ikke for if alligevel
Avatar billede labanos Nybegynder
19. december 2003 - 09:28 #8
hvis der ikke er smidt en itemlistener på hans button, kommer den sku da aldrig i itemStateChange... og dermed bliver source aldrig == hans button?...

og sorry jeg skrev state ind i navnet på listeneren...
Avatar billede labanos Nybegynder
19. december 2003 - 09:31 #9
og ja man kan sagtens bruge itemlisteners, men hvorfor bruge en itemlistener til en simpel knap der skal udføre noget når der trykkes på det...
det er jo ikke nogen speciel situation... det jeg mener er at actionlisteners er normalt mere end nok til en knap...
og nej bagved hænger buttons ikke kun sammen med actionlisteners... men du behøver ik andet i en standard situation..
Avatar billede labanos Nybegynder
19. december 2003 - 09:33 #10
og ja du har ret forløkken er dum, der skal som sagt en if til på en eller anden måde alligevel..
Avatar billede _carsten Nybegynder
19. december 2003 - 09:46 #11
Som jeg skrev 18/12-2003 17:49:19 skal newme bruge isSelected()

Oversæt til dansk.

public void actionPerformed(ActionEvent ae){
    if( EMail.isSelected() ){
   
    }
    else if( Print.isSelected() ){

    }
    else if( Afslut.isSelected() ){

    }
    else{
        System.out.println("Intet valgt);
    }
Avatar billede labanos Nybegynder
19. december 2003 - 10:00 #12
helt enig :)
Avatar billede joanna Nybegynder
19. december 2003 - 12:05 #13
Tak for det! Jeg tror det bliver godt!
Avatar billede nielyng Nybegynder
19. december 2003 - 15:26 #14
Hej Joanna.. Ville bare lige huske dig på, at du bør give point til det korrekte svar (Det er vist Carsten), så du lukker spørgsmålet.. :-)

go' arbejdslyst i T2!

/Niles
Avatar billede joanna Nybegynder
19. december 2003 - 15:30 #15
Yes sir!
Thank you sir!

;-)
Avatar billede _carsten Nybegynder
22. december 2003 - 10:25 #16
Synes der mangler noget her ......
Avatar billede _carsten Nybegynder
19. januar 2004 - 19:42 #17
Er det ved at være tid til at lukke spørgsmålet?
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