Gå til innhold

"is not abstract and does not override ... actionPerformed...


Anbefalte innlegg

Følgende kode fungerte fint før helgen og jeg trodde at jeg nå ikveld kunne komme et skridt videre, men nå får jeg plutselig feilmelding når jeg komplierer:

 

"EngelsktestGUI.java:5: EngelsktestGUI is not abstract and does not override abstract method actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener

class EngelsktestGUI extends JFrame implements ActionListener{"

 

Det er første gange jeg prøver å lage et grafisk brukergrensesnitt med Swing og ettersom jeg ikke husker hva jeg endret sist så vet jeg ikke hvordan jeg skal komme videre. Svært takknemlig dersom noen kan hjelpe.

 

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

class EngelsktestGUI extends JFrame implements ActionListener{

    public static void main(String[]args){
SwingUtilities.invokeLater
   (new Runnable(){
    public void run(){
	new EngelsktestGUI();
    }
});
   }

   EngelsktestGUI(){
setTitle("Engelsktest");
setSize(800, 600);
JButton stavetest = new JButton("Stavetest");
stavetest.addActionListener(new Spraktest());
JButton leggtilord = new JButton("Legg til ord");
JButton avslutt = new JButton("Avslutt");
avslutt.addActionListener(new Avslutter());
JPanel panel = new JPanel();
panel.add(stavetest);
panel.add(leggtilord);
panel.add(avslutt);
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
   }

}
class Avslutter implements ActionListener{
   public void actionPerformed(ActionEvent e){
System.out.println("07");
   }
}

class Spraktest implements ActionListener{
   public void actionPerformed(ActionEvent e){
String antallord = JOptionPane.showInputDialog("Hvor mange ord skal testen omfatte?");
int antallTestord = Integer.parseInt(antallord);
   }
}

Endret av PelleP
Lenke til kommentar
Videoannonse
Annonse
Actionlistener er ett interface, og i ett interface må alle metodene interfacet har implementeres i klassen som arver fra interfacet. Du har ikke implementert metoden actionPerformed(ActionEvent e), som beskrevet i API'et http://java.sun.com/javase/6/docs/api/

Jeg begriper egentlig ikke et smakk av det du sier, men jeg prøvde så godt jeg kunne.

 

Når jeg endret linjen: class EngelsktestGUI extends JFrame implements ActionListener{

slik:

class EngelsktestGUI extends JFrame {

så fungerte det.

 

Jeg hadde klassen spraktest som en indre klasse under klassen EngelsktestGUI, og det var vel jeg la til "implements ActionListener".

 

Takk for raskt svar, jeg tror jeg kunne bli sittende svært lenge med dette ellers.

Lenke til kommentar
Det som menes er at dersom du skriver implements ActionListner så sier du at klassen din kommer til å ha en metode: public void actionPerformed(ActionEvent e){}

Men du burde bruke anonyme klasser istedet for å lage egne klasser for eventhandlere.

Takk!

Det står visst noe om det i boken, skal lese...

Lenke til kommentar

Jeg foreslår at du benytter denne feilsituasjonen som en anledning til å lære deg hva interfaces er for noe. Det er ikke noe man kan hoppe over, for å si det sånn. Anonyme klasser kan være en enklere løsning i dette tilfellet ja, men ikke bruk det som argument for å hoppe over interfaces.

 

Les deg gjerne opp på abstrakte klasser også.

Werner

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...