JTable blokada skrótów (home, end)

JTable blokada skrótów (home, end)
AR
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 4 lata
0

Szanowni forumowicze,
Mam napisane keyEventy na klawisze home i end. Ale wykonują mi się też domyślne ich funkcje. Nie wiem jak je zablokować, getInputMap().size zwraca zero, gdzie to jest?
Nadpisywałem keyPressed, keyReleased i nic.

Dziękuję,
A.

Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
1

Nie wiem czy dobrze zrozumiałem, ale twoim problemem mogą być wcześniej zainstalowane (domyślnie?) listenery.
Istnieje sobie metoda KeyListener[] Component.getKeyListeners(), dzięki której dostaniesz listą wszystkich aktualnych listenerów na komponencie. Następnie za pomocą removeKeyListener() usuwasz sobie wszystkie i dodajesz swój (swoje). Coś w tym stylu:

Kopiuj
for(KeyListener listenerNonGrata: component.getKeyListeners())
	component.removeKeyListener(listenerNonGrata);
component.addKeyListener(słusznyListener);

Jeżeli robiłbyś to z wnętrza klasy, którą zmieniasz, to component. zamieniasz na this. lub nic.


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
AR
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 4 lata
0

A właśnie cała "ciekawość" tego problemu polega na tym, że jak usunę wszystkie keyListenery i cały ActionMap to złośliwy home i end nadal działają.

Kopiuj
for(KeyListener keyListener : myJXTable1.getKeyListeners()) {
            myJXTable1.removeKeyListener(keyListener);
        }

for(Object key : myJXTable1.getActionMap().allKeys()) {
            myJXTable1.getActionMap().remove(key);
        }

Powyższy kod usuwa mi wszystkie moje keyEventy, ale nie te 2 klawisze.
Co to może być? Po prostu zwariować z tym można. Przeszukuję dokumentację i nic nie ma:/ Nawet nie wiem gdzie szukać jak to nie listener... Tzn. musi być, ale widocznie jakiś "ukryty"?

edytowany 4x, ostatnio: arrowman
Olamagato
Wygląda mi na to, że próbujesz usuwać listenery nie od tego obiektu, który faktycznie odbiera eventy i łapie focus. Nie ma ukrytych listenerów, ale są ukryte obiekty (np. prywatne i pakietowe). weź też pod uwagę to jak eventy sobie wędrują po drzewku obiektów gui. Najpierw idą od tego, który ma focus, a potem coraz wyżej, aż do okienka top-level. Każdy z nich może sobie coś szemrać. Na najwyższym poziomie są obsługiwane natywnie poza JVM - tak jak na przykład wszystkie klawisze systemowe (alt+tab, ctrl+alt+esc, ctrl+alt+del itd.).
AR
Ok. Osioł ze mnie. Zapomniałem o JScrollPane, które jest nad JTable. Ok. Tylko, że usunięcie listenerów z JScrollPane nic nie pomogło, a tylko to może mieć wpływ (oprócz JTable) na przesuwanie widoku w tabeli... Kurcze. Już nie wiem. Wydaje się trywialna rzecz.
Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

Podstawowe pytanie - co się dzieje po naciśnięciu Home lub End?


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
AR
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 4 lata
0

Ano tak:-)
home - przechodzi do 1 kolumny zaznaczonego wiersza.
end - przechodzi do ostatniej kolumny zaznaczonego wiersza.

Sorki...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.