"is not abstract and..." Blad KeyListenera ?

0

Hej, ucze sie wlasnie programowania z ksiazka "Begining Java SE 6 Game programing, third edition" i mam pewnien maly problem ktroy mnie troche dobija gdyz niemoge znaelsc odpowedzi na to jak ten problem rozwiazac a pojawil sie juz drugi raz (mialem nadzieje ze autor wytlumczy to jednak sie mylilem) mianowicie podczas pisania programu u zyciem "KeyLisetener" w pierwszej klasie pojawia sie taki oto komunikat "at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.RuntimeException: Uncompilable source code - RotatePolygon is not abstract and does not override abstract method keyPressed(java.awt.event.KeyEvent) in java.awt.event.KeyListener
at RotatePolygon.<clinit>(RotatePolygon.java:9)" szukalem tutaj na forum odpowiedzi nie znalazlem, szukalem w googlach i sytuacja podobna.

import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.awt.event.KeyListener;
import java.applet.Applet;
import java.applet.*;
import java.util.*; 

public class RotatePolygon extends Applet // Blad pojawia sie w tym miejscu 
        implements KeyListener, MouseListener{
    private int[] xpoints = {0,-10,-7,7,100};
    private int[] ypoints = {-10,-2,10,10,-2};
    private Polygon poly;
    int rotation =0;
    public void init(){
        poly = new Polygon (xpoints, ypoints, xpoints.length);
        
        addKeyListener(this);
        addMouseListener(this);
    }
    public void paint(Graphics g){
        Graphics2D g2d =(Graphics2D)g;
        AffineTransform identity = new AffineTransform();
        int width = getSize().width;
        int height = getSize().height;
        g2d.setColor(Color.BLACK);
        g2d.fillRect(0, 0, width, height);
        
        g2d.translate(width/2,height/2);
        g2d.scale(20, 20);
        g2d.rotate(Math.toRadians(rotation));
        
        g2d.setColor(Color.RED);
        g2d.fill(poly);
        g2d.setColor(Color.BLUE);
        g2d.draw(poly);
    }
    public void keyReleased(KeyEvent e){}
    public void keyTyped(KeyEvent e){}
    public void keyPressed(KeyEvent e){      //poprawilem
        switch(e.getKeyCode()){
            case KeyEvent.VK_LEFT:
                rotation--;
                if (rotation<0) rotation=359;
                repaint();
                break;
            case KeyEvent.VK_RIGHT:
                rotation++;
                if(rotation>360) rotation =0;
                repaint();
                break;
        }
    }
    public void mouseEntered(MouseEvent m){}
    public void mouseExited(MouseEvent m){}
    public void mosueReleased(MouseEvent m){}
    public void mosueCliced(MouseEvent m){}
    public void mousePressed(MouseEvent m){    //poprawilem
        switch(m.getButton()){
            case MouseEvent.BUTTON1:
                rotation--;
                if(rotation<0)rotation=359;
                repaint();
                break;
            case MouseEvent.BUTTON3:
                rotation++;
                if(rotation>360)rotation=0;
                repaint();
                break;
        }
    }
}
 

Nie mam pojecia juz jak roziwazac ten problem, dlatego pisze na forum...

1

dokladnie to co mowi blad

is not abstract and does not override abstract method keyPressed(java.awt.event.KeyEvent)

nie przeciazasz funkcji keyPressed (u Ciebie ma jedno s)

0

A mozesz mi powiedziec lopatologicznie jak to zrobic ?

1

napisac poprawnie funkcje... czyli dodanie po pierwszym s drugiego s

0
fasadin napisał(a):

napisac poprawnie funkcje... czyli dodanie po pierwszym s drugiego s

:D
No wlasnie dodalem ale nic to nie zmienilo...

ale NetBenas zaproponowal mi "implement all abstract methods" i dopiero zaczal "fungowac" po dodaniu tych linijek kodu

 
Override
    public void mouseClicked(MouseEvent me) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void mouseReleased(MouseEvent me) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

jednak dalej nie wiem co to zanczy... i musze sie doinformowac na ten temat :)

0

były inne błędy których nie podałeś

w twoim kodzie wyżej masz napisać jak byk

mosueCliced
zamiast clicked a drugiej funkcji po prostu nie masz

1
  1. ROBISZ TO ŹLE
  2. NIE RÓB klasy "człowiek orkiestra". Jak coś jest Appletem to jest apletem i już! Nie jest key listenerem, mouse listenerem, ani listonoszem. Jedna klasa, jedna odpowiedzialność.
  3. Zrób dwie NOWE KLASY. Jedna która będzie MouseListenerem a druga która będzie KeyListenerem.
  4. Skoro nie chcesz implementować całego MouseListenera albo KeyListenera to zamiast implementować interfejs dziedzicz z adaptera (np. zrób extends MouseAdapter). Adaptery to są takie "puste" implementacje dla tych interfejsów. Możesz sobie wtedy overridować tylko te metody które cię interesują.

0 użytkowników online, w tym zalogowanych: 0, gości: 0