Skocz do zawartości

[Java] Problem z kompilacją programu


Adamg1996

Rekomendowane odpowiedzi

Hej napisałem sobie taki program (jeszcze nie skończony).

 

import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;
import java.util.*;

public class ApImg {
public static void main(String args[]){

Okno okno=new Okno();

}
}

class Okno extends JFrame {
public Okno(){

        setSize(800,600);
        setTitle("Obrazek");
        Panel panel=new Panel();
        Border krawedz=BorderFactory.createLineBorder(Color.red,5);
        panel.setBorder(krawedz);
        add(panel);
        setDefaultCloseOperation(3);
        setLocationRelativeTo(null);
        setVisible(true);
        
}
}

#class Panel extends JPanel implements KeyListener {
int x=0;
int y=0;
public Panel()
{
    setFocusable(true);
$    addKeyListener(this);
}
#public void KeyPressed(KeyEvent e){
    int kod=e.getKeyCode();
#         if (kod==KeyEvent.VK_RIGHT){
        x=x+4;
        }    
#        if (kod==KeyEvent.VK_LEFT){
        x=x-4;
        }    
#        if (kod==KeyEvent.VK_UP){
        y=y-4;
        }    
#        if (kod==KeyEvent.VK_DOWN){
        y=y+4;
        }
        }
        
#public void KeyTyped(KeyEvent e){}
#public void KeyRelased(KeyEvent e){}            
public void paintComponent(Graphics g){
         ImageIcon im=new ImageIcon("img.png");
         Image img=im.getImage();
         g.drawImage(img,x,y,null,null);
}
}

# - cannot find symbol

$ - method addKeyListener in class component cannot be applied to given types

 

Ktoś wie dlaczego wyskakuja takie błędy ?

Odnośnik do komentarza
Udostępnij na innych stronach

Wg. mnie powinno być "else if" zamiast kolejnych ifów i programuje od jakiegoś czasu w javie i nie wiem o co biega z # i $. Zamiasta Panel daj JPanel, nie ma takiego komponentu jak Panel

 

Sry. dopiero potem się kapłem o co chodzi z # i $ :)

EDIT2: Nie powinno być keyTyped i keyRealesed ?

Odnośnik do komentarza
Udostępnij na innych stronach

$ - method addKeyListener in class component cannot be applied to given types

odnosi się do:

#class Panel extends JPanel implements KeyListener {

Piszesz by pisać, czy masz pojęcie, o co w Javie chodzi ;) ? "extends JPanel" to dziedziczenie wszystkich cech po klasie JPanel. No i jest dobrze, tak się robi. Natomiast "implements KeyListener" to zaimplementowanie interfejsu KeyListener, a raczej deklaracja, że do takowego się dostosujesz. Gdzie tu jest dostosowanie się :) ?

 

Kolejna uwaga: Sposób, w jaki piszesz, nie ma z Javą nic wspólnego. Co zmienne x i y mają wspólnego z panelem, a co panel z odczytywaniem zdarzeń? Tworzysz osobną klasę, np. Hero, czy Player. Jeżeli ma mieć tylko jedną instancję, to może być i statyczna. Dajesz zmienne o zasięgu prywatnym (private) x i y i tworzysz metodę zwracającą obiekt "punkt" o nazwie np. getCoords(), ewentualnie metody getX() i getY(). Tak wygląda Java. Polecam książkę "Core Java", chyba najlepsza możliwa pozycja :) .

 

Sporo Javy nie tykałem, za ewentualne błędy - przepraszam :) .

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...