MouseMotionListener bez JComponentu

0

Witam ponownie

Pytanie mam nastepujace, czy jest sposob na zaimplementowanie listenerow MouseMotionListener i MouseListener w zwyklej klasie bez obiektu JFrame i pochodnych ??

0

Chodzilo mi o to ze, czy sie da zebrac dane o kliknieciu w innym miejscu, poza komponentem Javy na ekranie.
zwykla pozycja myszki moze byc zebrana z

MouseInfo.getPointerInfo()

ale chcialbym zeby to dzialalo przy kliknieciu a nie przy ruchu (na pulpicie).
:)

0

Z tego co ja czytałem (a szukałem informacji na ten temat przy pisaniu ostatniego programu), to te zdarzenia są przesyłane do konkretnej aplikacji (i w dół jej hierarchii komponentów), nie ma możliwości przechwycenia zdarzeń globalnych. To przy użyciu, powiedziałbym - normalnych środków. Można oczywiście użyć JNI (Java Native Interface) i skorzystać z bogactwa np. WinAPI (zakładamy hook'a i przejmujemy zdarzenia globalnie). Natomiast wtedy wiadomo, że program musi być uruchamiany na Windowsie.

0

HAAAAAAAAAAAa a moj promotor podpowiedzial mi pewien pomysl calkiem abstrakcyjny ale na pierwszy rzut oka powinien dziala:

  1. robimy okno bez ramki na cały ekran, nadajemy oknu 100% przezroczystości
  2. otrzymujemy kliknięcie zwykłym MouseListenerem i odczytujemy pozycję kliknięcia
  3. ukrywamy przezroczyste okno
  4. przekazujemy kliknięcie klasą java.awt.Robot - można nią symulować klikanie na całym ekranie
  5. przywracamy przezroczyste okno i od nowa pkt 2.
0

Owszem, daje to sporo pola do popisu i pewnie wystarczy. Ale czy jest idealne? Np. czy da się wykryć kliknięcie na obszarze paska zadań, bo np. pod Ubuntu okno nie wjedzie Ci na ten panel z Programy, Miejsca, System, ani żaden inny panel. Chyba, że się mylę :P Ale i tak mamy spory obszar pod kontrolą.

0

Od bodajze Javy 4 lub 5 jest mozliwosc robienia bezpaskowego/bezramkowego okna lub okna na całą powierzchnie monitora jak w grach.
Chwile bawilem sie tym rozwiazaniem i zauwazylem pierwszy problem, przy 100% transparentnosci okno trzyma pierwsza warstwe za sobą :) czyli nie zmienia swojego wypelnienia jesli zmieni sie tlo :/

Ale teoretycznie po jednym kliknieciu ramka ma znikac i pojawic sie znowu z nowym tlem, tylko co jesli tlo sie zmieni i nienadazy za tym okno :) ???

CDN

Przed chwila znalazlem tez natywna obsluge myszki w bibliotece do gier http://lwjgl.org/demos.php// ale boje sie natywnej Javy :/

0

Nie zrozumieliśmy się - nie chodzi mi o belkę tytułową przezroczystego okna, tylko te panele zaznaczone w załączniku na czerwono. Okno przeglądarki jest zmaksymalizowane i nie wchodzi na nie, dlatego nie przejmiemy kliknięć na tamtych obszarach pomimo tego sposobu z przezroczystym oknem. Ale jak już mówiłem, tak czy siak mamy duży obszar, gdzie przechwytujemy zdarzenia i być może nie ma się czym przejmować, ale rozwiązanie nie jest idealne w sensie, że obsłużymy wszystkie kliknięcia użytkownika.

185939-mousemotionlistener_bez_jcomponentu?mode=download&id=1083 </img>

0

Da się to przeskoczyć przez wymuszenia nieudekorowanego okna z flagą taką jak "Always on Top". Java jednak chyba nie obsługuje takiej flagi i trzeba by to robić nieprzenośnie dla każdego systemu GUI osobno. Sprawdziłem, że program Javy wchodzi na obszary zajmowane przez te paski, albo jeżeli zdejmie się im ten specjalny status, albo przydzieli się go okienku kontrolowanemu przez JVM. Tak więc ta druga opcja rozwiązuje ten problem całkowicie. Tyle, że (na razie?) nieprzenośnie.

0

Olamagato, a propoS always on top: http://stackoverflow.com/questions/297938/always-on-top-windows-with-java

"Sprawdziłem, że program Javy wchodzi na obszary zajmowane przez te paski, albo jeżeli zdejmie się im ten specjalny status, albo przydzieli się go okienku kontrolowanemu przez JVM. Tak więc ta druga opcja rozwiązuje ten problem całkowicie."

Nie do konca rozumiem :)

tutaj jest opcja wrzucenia na cały monitor od 0,0 do max, max: http://download.oracle.com/javase/tutorial/extra/fullscreen/index.html

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