Obsługa klawiszy strzałek

2015-02-03 21:22
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.

edytowany 1x, ostatnio: bogdans, 2015-02-04 07:47
!Wstawiaj kod w znaczniki <code=java></code> - bogdans 2015-02-04 07:48

Pozostało 580 znaków

2015-02-03 21:52
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);
    }
edytowany 2x, ostatnio: bogdans, 2015-02-04 07:48
Każdy Twój post z "niepokolorowanym" kodem będę usuwał bez ostrzeżenia. - bogdans 2015-02-04 07:50

Pozostało 580 znaków

2015-02-03 22:04
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

edytowany 3x, ostatnio: bogdans, 2015-02-04 07:50

Pozostało 580 znaków

2015-02-03 22:27
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

Pozostało 580 znaków

2015-02-03 22:32
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...

edytowany 1x, ostatnio: bogdans, 2015-02-04 07:51

Pozostało 580 znaków

2015-02-03 22:38
0

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

Pozostało 580 znaków

2015-02-03 22:39
0

Pozatym nie lepiej wyswiwtlic to w konsoli?

Pozostało 580 znaków

2015-02-03 22:39
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

edytowany 1x, ostatnio: wojciechmaciejewski, 2015-02-03 22:41

Pozostało 580 znaków

2015-02-03 22:43
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.

edytowany 2x, ostatnio: Night Walker, 2015-02-03 22:44

Pozostało 580 znaków

2015-02-03 23:01
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...

edytowany 1x, ostatnio: bogdans, 2015-02-04 07:53

Pozostało 580 znaków

2015-02-03 23:08
0

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

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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