Skocz do zawartości

[Java] Problem z kompilacją programu


Rekomendowane odpowiedzi

Opublikowano

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 ?

  • Administratorzy
Opublikowano

Hm, a nie pokazuje linijek w których znajduje te problemy? Większość środowisk tak robi...

Opublikowano

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 ?

Opublikowano

Napisz

JPanel panel=new JPanel();

bo wydaje mi się, że ten Panel daje się we znaki tamtemu. Nie powinieneś dawać akcji w ActionListenerze?

Opublikowano

$ - 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 :) .

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ę...