Obsługa klawiszy strzałek

0

Witam.
Na początku chciałbym zaznaczyć, że dopiero zaczynam Javę więc proszę o wyrozumiałość. Długo szukałem rozwiązania mojego problemu na różnych stronach (także na tej stronie), ale jako, że jestem zielony to nie mogłem się połapać o co chodzi.
Bez dalszego owijania w bawełnę. Mam taki przykładowy kod:

package obsługastrzałek;

public class ObsługaStrzałek 
{

    public static void main(String[] args) 
    {
        
    }
    
}


class strzalki
{
    public String strzalka="";
}

I teraz chciałbym zrobić tak, że w momencie naciśnięcia strzałki w górę wartość strzalka w klasie strzalki zmieni się na "gora", w przypadku naciśnięcia strzałki w dół zmieni się na "dol" itd. Wiem, że może się to wydawać banalne, ale jak już mówiłem, dopiero zaczynam zabawę w Javie i nie potrafię sobie poradzić z tym problemem. Bardzo bym prosił o nie odsyłanie mnie do innych stron i tematów na forum.

0

Musisz implementowac klase : public class ObsługaStrzałek implements KeyListener na poczatek :)
Pózniej coś takiego zrób i spójrz jaki kod ma każda strzałka

	@Override
	public void keyPressed(KeyEvent evt)
	{
		int c =evt.getKeyCode();
		System.out.println(c);
	}
0

Ok, czyli mam coś takiego:

package obsługastrzałek;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


public class ObsługaStrzałek implements KeyListener
{

    public static void main(String[] args)
    {
       
    }
    
    @Override
    public void keyPressed(KeyEvent evt)
    {
        int c =evt.getKeyCode();
        System.out.println(c);
    }
   
}


class strzalki
{
    public String strzalka="";
}

Tylko coś tu jest nie tak, ale nie wiem co, bo wywala błąd w tej linii: "public class ObsługaStrzałek implements KeyListener". Jak to rozwiązać?

edit: Dobra, poradziłem sobie, już nie wywala błędu :D

0

Klase strzalki mozesz usunac a potem tam gdzie miales nasluchiwanie, zrob if i np jesli strzalka a gore miala kod 40 to if(c==40) { system.out.println " piszesz co ma wyswietlic"} i to tyle

0

Kurcze, jakoś dalej mi to nie wychodzi... Zmieniłem troszkę podejście. Zrobiłem takie cuś:

package obsługastrzałek;

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


public class ObsługaStrzałek implements KeyListener
{

    public static void main(String[] args)
    {
        Okno ramka = new Okno();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.show();
    }
    
    @Override
    public void keyReleased(KeyEvent evt)
    {
        int c =evt.getKeyCode();
        JOptionPane.showMessageDialog(null,"Nacisnąłeś: "+c);
    }
    
    @Override
    public void keyTyped(KeyEvent evt)
    {
    }
    
    @Override
    public void keyPressed(KeyEvent evt)
    {
    }
   
}

class Okno extends JFrame
{
    public Okno()
    {
        setSize(200, 200);
    }
}

Programik wyświetla okienko. I teraz chciałem zrobić tak, że jak nacisnę jakiś klawisz to wyskoczy okienko z komunikatem co wcisnąłem, ale po naciśnięciu jakiegokolwiek klawisza nic się nie dzieje...

0

Getkeycode wyswietli Ci kod przycisku.Podalem go bo byla mowa o strzalkach tylko... Co wgl ten program ma robić?

0

poza tym nie lepiej wyswiwtlic to w konsoli?

0

Bo key listener musi być podpięty do czegoś, tzn do czegoś na czym jest focus. czyli ten swój keylistener musisz pod coś podpiąć a nie tylko go implementować.

dodaj

 ramka.addKeyListener(this);

i powinno banglać.

Rada, nie rób nic w mainie, tylko wywołaj jakąś inną klasę która odpowiada za program.

pzdr

EDIT:

i nie wierzę Ci że szukałeś jakiegoś rozwiązania, bo podpowiadacz forum przy twoim temacie daje odnośniki do 20 takich samych gdzie masz dokładnie opisane co i jak robić

leniuszek :P

0

@Neqero, znaczy się, piszę całkowicie inny program robiący zupełnie co innego, do zrobienia którego potrzebna jest mi obsługa strzałek. W moim programie rysuje się siatka po której ma się przemieszczać kropeczka po naciśnięciu strzałki, jednak to nie jest ważne. Chodzi mi tylko o nauczenie się obsługi klawiatury.

W każdym razie, dlaczego w powyższym kodzie po naciśnięciu klawisza nie wyskakuje okienko z komunikatem?

edit: @wojciechmaciejewski szukałem po forum, ale jak już pisałem jestem nowy w javie.

0

Hmmm... Chyba jestem jakiś lewy bo mimo waszych rad jakoś nie mogę do niczego dojść samemu... Wiem, że to wygląda tak jakbym chciał abyście zrobili wszystko za mnie, ale jeśli nie zobaczę gotowego przykładu na własne oczy to chyba nie załapię o co chodzi. Czy mógłbym prosić aby ktoś przerobił poniższy kod tak aby po naciśnięciu jakiegoś dowolnego klawisza, choćby i strzałki, pojawił się komunikat co nacisnąłem?

package obsługastrzałek;

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


public class ObsługaStrzałek implements KeyListener
{

    public static void main(String[] args)
    {
        Okno ramka = new Okno();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.show();
    }
   
    @Override
    public void keyReleased(KeyEvent evt)
    {
        int c =evt.getKeyCode();
        JOptionPane.showMessageDialog(null,"Nacisnąłeś: "+c);
    }
   
    @Override
    public void keyTyped(KeyEvent evt)
    {
    }
   
    @Override
    public void keyPressed(KeyEvent evt)
    {
    }
   
}

class Okno extends JFrame
{
    public Okno()
    {
        setSize(200, 200);
    }
}

Bardzo proszę o pomoc, jeśli nie załapię w ten sposób to już chyba nie ma dla mnie ratunku...

0

W maine dodaj linijke: ramka.addKeyListener(this); i powiedz czy cos sie dzieje

0

wyskakuje błąd: "non-static variable this cannot be referenced from a static context"

0

O, wreszcie się mi udało! :D

Dziękuję pięknie wszystkim za pomoc :)

Jakby się ktoś interesował to poniżej zamieszczam moje wypociny:

package obsługastrzałek;

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


public class ObsługaStrzałek
{

    public static void main(String[] args)
    {
        Okno ramka = new Okno();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.show();
    }
   
}

class Okno extends JFrame implements KeyListener
{
    public Okno()
    {
        setSize(200, 200);
        this.addKeyListener(this);
    }
    
    
    @Override
    public void keyReleased(KeyEvent evt)
    {
        int c =evt.getKeyCode();
        JOptionPane.showMessageDialog(null,"Nacisnąłeś: "+c);
    }
   
    @Override
    public void keyTyped(KeyEvent evt)
    {
    }
   
    @Override
    public void keyPressed(KeyEvent evt)
    {
    }
}
0

Mam nadzieje ze wiesz teraz jak zrobic zeby dzialaly.strzalki ktore maja swoj kod :) jesli nie to pisalem o tym na poczatku :)

0

@Neqero Już załapałem o co chodzi, teraz jeszcze tylko troszkę pokombinować i wszystko będzie gotowe. Jeszcze raz dzięki :)

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