Avatar billede fireworld Nybegynder
03. oktober 2001 - 20:19 Der er 9 kommentarer og
2 løsninger

actionlistener??

Hej jeg sidder med en guide her i javabogen ... og jeg er nået til actionlistener...
jeg har lavet dette eksempel


import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class test extends Applet
{
Label mads = new Label();
Button knap = new Button();
public void init()
    {
    mads.setText(\"Yo\");
    knap.setLabel(\"Tryk\");
    knap.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(ActionEvent e) {
    knap_tryk(e);
    }
    });
    indsat();
    }
public void indsat()
    {
    this.add(mads);
    this.add(knap);
    }
void knap_tryk(ActionEvent e)
    {
    mads.setText(\"trykket\");
    repaint();
    }
}



men jeg tænkte ... det med actionlisteneren ... det er da lidt meget at skulel skrive .... hvordan laver man en nem action listerner som fylder mindst og skal kunne have funktion at man skal kunne sende en variabel til den og så skal den gøre noget forskellige alt efter hvad der står i variabelen!!!

Avatar billede fireworld Nybegynder
03. oktober 2001 - 20:19 #1
håber i forstår :)
Avatar billede lbhansen Nybegynder
03. oktober 2001 - 20:42 #2
det der er faktisk en af måderne at gøre det på. Og den er faktisk ganske udemærket.

Hvis du vil sidde og håndtere hvilke knapper der bliver trykket på o.lign. Så læs noget om KeyListener istedet
Avatar billede fireworld Nybegynder
03. oktober 2001 - 20:48 #3
jah joooh... men f.eks hvis jeg vil have 2 knapper ind ... hva gør jeg så??? skal jeg så lave en sådan her

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class test extends Applet
{
Label mads = new Label();
Button knap,knap2 = new Button();
public void init()
    {
    mads.setText(\"Yo\");
    knap.setLabel(\"Tryk\");
    knap.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(ActionEvent e) {
    knap_tryk(e,1);
    }
    });

    knap2.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(ActionEvent e) {
    knap_tryk(e,2);
    }
    });
    indsat();
    }
public void indsat()
    {
    this.add(mads);
    this.add(knap);
    }
void knap_tryk(ActionEvent e,int gordette)
    {
if(gordette==1){
    mads.setText(\"trykket\");
}
else
{
mads.setText(\"trykket2\");
}

    repaint();
    }
}
Avatar billede mipe1 Nybegynder
03. oktober 2001 - 21:27 #4
ja med to knapper kan det der være måden og faktisk en udemærket måde, som gør at koden for den specifikke actionlistener kun er tilknyttet den enkelte knap.

En anden måde er at du kan lave en ActionListener klasse, ja ok det er jo det du gør med den anonyme klasse.

Men f.eks. tag din applet og lad den implementere actionlistener:

public class test extends Applet implements ActionListener

nu skal du så bare lave en metode i din klasse:

public class test extends Applet implements ActionListener {
...
public void actionPerformed(ActionEvent e) {
//her kan du så tjekke på hvad e er og udføre en handling
//derefter
}
...
}

nu kan du så bare for hver knap sige
knap2.addActionListener(this);
knap3.addActionListener(this);

osv.

det er en anden måde man kan gøre det på, som nok skulle spare et par linier.

Håber du forstår ellers sig til




Avatar billede carstenknudsen Nybegynder
03. oktober 2001 - 21:43 #5
En simpel løsning er som følger hvor text1 og
text2 er knappernes tekst:

ActionListener listener = new ActionListener() {
    public actionPerformed( ActionEvent e ) {
        String cmd = e.getActionCommand();
        if ( cmd.equals(\"text1\" ) ) {
        ....
        }
        else if (cmd.equals(\"texct2\") ) {
        ....
        }
    }
};
knap1.addActionListener(listener);
knap2.addActionListener(listener);
Alternativt kan du teste med
if ( e.getSource().equals(knap1) )
og lignende, men så skal knapperne
være erklæret final, så i simple
tilfælde er det ikke den foretrukne løsning.
Avatar billede mipe1 Nybegynder
04. oktober 2001 - 16:36 #6
Ja det er også en måde, dvs. hele tre måder at gøre det på

Man kunne også lave en actionlistener klasse som en indre klasse til det panel som den nu hører til(hvis det er tilfældet), hvilket nok er den løsning jeg foretrækker i de fleste tilfælde.

Vil man have en totalt overordnet actionlistener bør man nok splitte den ud i sin egen klasse:

public class MyActionListener implements ActionListener{
...
  public void actionPerformed(ActionEvent e) {
    .....
    .....
  }
...
}

og så i den klasse hvor man har knapper anvende

knap1.add(ActionListener(new MyActionListener());

Så alt i alt mange muligheder og hvad man vælger afhænger i høj grad af den enkelte situation og om designmæssige fordele(f.eks. samhørighed og kobling)
Avatar billede izyr Juniormester
08. oktober 2001 - 13:04 #7
Button b1 = new Button;

b1.addActionListener(new ActionListener()
  {
    public void actionPerformed(ActionEvent e)
      {
        System.out.println(\"Whatever!\");
      }
  });
Avatar billede izyr Juniormester
08. oktober 2001 - 13:08 #8
Jeg har ikke set det kortere!
Avatar billede carstenknudsen Nybegynder
08. oktober 2001 - 13:39 #9
izyr:  Hvis du læser spørgsmålet kan du se præcis
den kode du foreslår!
Avatar billede fireworld Nybegynder
08. oktober 2001 - 17:23 #10
tak
Avatar billede izyr Juniormester
08. oktober 2001 - 17:38 #11
mener man en actionlistener på et par linier(her 7) er for langt bør man nok ikke kode :o) Og jeg har skam set det, men som jeg også skriver så har jeg ikke set dem kortere....
:o)
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