KeyListener dla całej aplikacji

0

Jak zrobić, żeby KeyListener działał dla całej aplikacji, a nie tylko dla podanego obiektu? Tak, żebym mógł zczytać jaki klawisz został wciśniety, niezależnie od tego w jakim obiekcie teraz kursor jest.

0

nic błyskotliwego mi nie przychodzi do głowy. ponieważ model obsługi zdarzeń w Javie jest hierarchiczny, to musisz propagować zdarzenie w górę. co to znaczy?
piszesz obsługę KeyEventa dla aplikacji
piszesz obsługę dla np. TextField
teraz jeżeli kursor masz w polu textowym, naciskasz klawisz, to w obsłudze tego w TextField musisz wysłać zdarzenie w górę do aplikacji. to gorszy przypadek
w lepszym, jeśli nie obsługujesz tego eventa dla TF, to automatycznie zostanie skierowane do rodzica

0
JFrame f = new JFrame();
f.addKeyListener(listener);
0

em1x: niestety tak próbowałem i nie działa.

Teraz wpadłem na pomóc, żeby zrobić to na BufferedInputStream, ale jednak metoda read() działa tylko wtedy, jeśli skończe to enterem. Do tego to chyba by działało tylko w aplikacjach konsolowych... Nie ma innego sposobu, na zczytanie tego co się dzieje na klawiaturze, żeby zrobić prostą grę?

0

na frame'a wstaw panel ;) i daj sluchacza dla tego panel'a

ja tak zrobiłem sokobana. wtedy zczytuje wszystko.

aha dodaj jeszcze żeby po dowolnej akcji na dowolnym komponencie po za panelem kursor przenosił się na panel

0

Na uczelni mialem jako projekt napisanie gry, mniejsza z tym jakiej ;) i jakos smigalo bez problemu? Trzeba sie raczej bledu dopatrywac z tego, jak implementujesz akcje listenera.

0
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

class Test extends JFrame implements KeyListener {

	public void keyTyped(KeyEvent e) {}
	public void keyPressed(KeyEvent e) {}
	public void keyReleased(KeyEvent e)
	{
		JOptionPane.showMessageDialog(null, "" + e.getKeyChar());
	}

	public Test()
	{
		super("Testujemy klawisze");
		addKeyListener(this);
		
		getContentPane().add(new JLabel("press any button.."));
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(200,200);
		setVisible(true);
	}

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

i powiedz mi ze to nie dziala? :/

0

nie działa w przypadku jednego klawisza. Esc mianowicie ;)

0

Chyba zartujesz?

0

nie nie żartuję :)

Java 1.5.0_05
JCreator

i Esc nie działa :|

0

Co ma JCreator do aplikacji javy? W jakim sensie nie dziala, bo u mnie jak najbardziej.

0

nie dziala w tym sensie że nie wyświetla dialoga :)

nic na to nie poradze :)

ale zauważyłem to już niejednokrotnie że z Esc jest problem. Java niekoniecznie dobrze go czyta :D

nie wiem z czego to wynika :( po prostu

mam windę 2ooo pro. ale przetestowałem Twój kod dzisiaj na uczelni na windzie xp. tam działa 8-|

0

Witam
Czy ktoś spotkał się z podobnym problemem nie działania keylistenera w apletach?
Jako ,ze aplet dziedzczy po panelu a nie po frame to niestety rozwiązania ,kotre tu podaliście nie działają.(przynajmniej u mnie)

pzdr

0

Podłączam się do tematu:

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
 
class Test extends JFrame implements KeyListener {
 
    @Override
    public void keyTyped(KeyEvent e) {}
    @Override
    public void keyPressed(KeyEvent e) {}
    @Override
    public void keyReleased(KeyEvent e)
    {
        JOptionPane.showMessageDialog(null, "" + e.getKeyChar());
    }
 
    public Test()
    {
        super("Testjujemy klawisze");
        addKeyListener(this);
 
        getContentPane().add(new JLabel("press any button.."));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(200,200);
        setVisible(true);
        setAlwaysOnTop(true);
    }
 
    public static void main(String[] args)
    {
        new Test();
    }
}
 

Program działa wszystko fajnie.
Dodałem jedną linijkę setAlwaysOnTop(true);
Zależy mi na tym aby program reagował na klawisze gdy nie jest aktywny, lub jest np w tray'u.
Czy może nasłuchiwanie zdarzeń windowsa, jak by mógł ktoś mnie nakierować.
z góry dziękuję i pozdrawiam.

0

Nikt nie odpisał na mój post ale wyczytałem że chodzi o :
globalnego hooka
może komuś się przyda
Globalny hook...

0

http://4programmers.net/Forum/1099154

Tu jest całe rozwiązanie.

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