[JAVA] Button Actionlistener gebruiken

Pagina: 1
Acties:
  • 119 views sinds 30-01-2008
  • Reageer

  • xos
  • Registratie: Januari 2002
  • Laatst online: 28-08 15:35
Ik ben bezig mijn eerste GUI te bouwen in java. Ik heb eerst een methode die de verschillende componenten aanmaakt. Vervolgens de main methode die het GUI op het scherm zet. Ik wil nu dat wanneer iemand op de button drukt en een methode in een andere classe uitgevoerd wordt. Alleen ik krijg dit niet voor elkaar :( Voor de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// componenten aanmaken
public class ordenen implements ActionListener{
  public Component createComponents() {
      JLabel input = new JLabel("Geef de bestandsnaam zonder extensie"); 
     JTextField inputbestand = new JTextField(10);
     JRadioButton az = new JRadioButton("A - Z");
     JRadioButton za = new JRadioButton("Z - A");
     ButtonGroup group = new ButtonGroup();
     group.add(az);
    group.add(za);
     JButton ok = new JButton("Ok");    
     ok.addActionListener(new ActionListener()  {
         public void actionPerformed(ActionEvent e) {
          SorterenAZ.sort();
}});

// code die aangeroepen moet worden
class SorterenAZ extends ordenen {
    public static void sort() {  
    blabla
    }
}

Dit is de foutmelding die ik krijg. ordenen should be declared abstract; it does not define actionPerformed(java.awt.event.ActionEvent) in ordenen public class ordenen implements ActionListener{

Als ik de classe abstract maak krijg ik de volgende foutmelding: ordenen is abstract; cannot be instantiated

Wie kan mij verder helpen??

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

Alarmnummer

-= Tja =-

als je een interface (met methoden wel te verstaan) implementeerd, dan moet je iedere methode van die interface implementeren. Dus jou object 'ordenen' moet de volgende methode implementeren:

public void actionPerformed(ActionEvent ae){
}

verder ziet je code er slecht uit.. het smells ;)
1) Alle klassen beginnen met hoofdletters. Dus het zou Orderenen moeten zijn ipv ordenen.

2) ik snap echt helemaal niets van jouw overerving. Je roept vanuit de parent class ordenen een specifieke methode aan naar de kinder class SorterenAZ.

zo zoiets niet handiger zijn?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
abstract class Ordenenen implements ActionListener{

    public void actionPerformed(ActionEvent ae){
      sort();
    }

    public abstract void sort();
}

class SorterenAZ extends Ordenen{
    public void sort(){
      ..sorteren van A naar Z
    }
}

class SorterenZA extends Ordenen{
    public void sort(){
      ..sorteren van Z naar A
    }
}

en aub gevordere javahova, geen gezeur aub hierover want dit zuigt nog aan alle kanten maar het is alleen ter verduidelijking. Je zou ook perfect een Strategy design pattern hierop kunnen toepassen.

3) het is een vrij rommelige manier zoals jij je actionListener aansluit, misschien kan je zo iets beter doen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class SorteerPanel extends JPanel{

    private JButton okButton = new JButton();

    public void SorteerPanel(){
      ...maak alle components aan.
      okButton.setAction(new OkAction());
    }

    private class OkAction extends AbstractAction{
     public OkAction(){
         super("Ok");
     } 

     public void actionPerformed(ActionEvent ae){
     }
    }
}



er zijn nog meer dan genoeg andere punten waarop verbeterd kan worden maar ik weet niet wat je wil maken.

  • Freak_NL
  • Registratie: Juli 2000
  • Laatst online: 05-09 20:53
Inderdaad, no offence, maar je code is een beetje "slordig". Wen je zelf aan te werken met [TAB]'s en geef je variabelen en klassen duidelijke namen!

Een class is in Java zowiezo met een hoofdletter (class Ordenen). De JLabel die jij "input" noemt had ik "labelInput" genoemd. Een persoonlijke voorkeur, dat wel, maar een stuk netter als je je code ook netjes uitlijnd.

Misschien helpen de artikelen hier je een beetje: Java ``trails'' op java.sun.com

[edit] Alarmnummer heeft zijn post geedit en geeft nu wat bruikbare hints, die die van mij een beetje overbodig maken :)