Skocz do zawartości
Adamg1996

[Java] Problem z kompilacją programu

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 ?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Udostępnij tego posta


Odnośnik do posta
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 ?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Napisz

JPanel panel=new JPanel();

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

Udostępnij tego posta


Odnośnik do posta
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 :) .

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×