Avatar billede davidfossil Nybegynder
12. juni 2005 - 18:22 Der er 8 kommentarer og
1 løsning

Nemmeste måde at sætte action på sin knap (swing)

Jeg ønsker mig en knap, som skal køre en metode i mit program.
Er det virkelig nødvendigt at lave en ny klasse, der implementerer ActionListener, for at binde denne til knappen gennem addActionListener() ?

Kan det ikke gøres lettere uden at skulle implementere ActionListener? Knappen skal bare kalde en metode...
Avatar billede arne_v Ekspert
12. juni 2005 - 18:36 #1
mange lader klassen selv implementere ActionListener og kalder addActionListener med this
Avatar billede arne_v Ekspert
12. juni 2005 - 18:38 #2
eksempel:

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

public class MultiButton extends JFrame implements ActionListener {
  JButton[] button;
  public MultiButton(int n) {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().setLayout(new GridLayout(5, n / 5));
      button = new JButton[n];
      for (int i = 0; i < button.length; i++) {
        button[i] = new JButton("Button " + (i + 1));
        button[i].addActionListener(this);
        getContentPane().add(button[i]);
      }
      pack();
  }
  public void actionPerformed(ActionEvent ev) {
      for (int i = 0; i < button.length; i++) {
        if (ev.getSource() == button[i]) {
            JOptionPane.showMessageDialog(null, "Number " + (i + 1));
        }
      }
  }
  public static void main(String[] args) {
      MultiButton f = new MultiButton(20);
      f.show();
  }
}
Avatar billede kalp Novice
13. juni 2005 - 12:56 #3
Det er jo ikke ligefrem svært hvis du anvender den rigtige compiller:)
Hvis du har en drag & drop mulighed til gui så prøv at dobbeltklikke på din knap.. så burde den selv oprette alt det nødvendige.
Avatar billede jime_boy Nybegynder
13. juni 2005 - 16:53 #4
Du skal implementere actionalistener til klassen:

private class klasseNavn implements ActionListener

under der hvor du opretter knappen skal du have:

knap.addActionListener(this);

Du skal have en metode der ser sådan ud:

public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==knap)
            {
            metodenDerSkalKøres();
            }
    }


På den her måde kan du får det til at fungere...
Avatar billede mikkelbm Nybegynder
13. juni 2005 - 17:42 #5
Man kunne jo også gøre:

knap.addActionListener (new ActionListener()
{
  public void actionPerformed (ActionEvent e)
  {
      //...
  }
});

Der er lidt delte meninger om det er pænt, men Sun bruger det selv i mange af deres eksempler.
Avatar billede mikkelbm Nybegynder
13. juni 2005 - 17:44 #6
Og lige en ting... Hold dig fra kode lavet af gui designere. Det er noget rod, og det kræver en del at vedligeholde det.
Avatar billede arne_v Ekspert
24. juli 2005 - 16:13 #7
david>

tid at få afsluttet dette spørgsmål ?
Avatar billede davidfossil Nybegynder
30. marts 2006 - 22:01 #8
arne : Endnu en gang beklager jeg "ventetiden". Hvis du smider et svar, så lukker jeg festen :)
Avatar billede arne_v Ekspert
30. marts 2006 - 22:30 #9
ok
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