2009-09-04 9 views
19

Mam JTable z JLabel[][] jako dane. Teraz chcę wykryć podwójne kliknięcie na JLabel lub komórkę tabeli (ale tylko w jednej z kolumn). Jak mogę dodać Action/MouseListener na komórce tabeli odpowiednio JLabel?ActionListener na komórce JLabel lub JTable

+0

JLabels nie mają ActionListeners, ale ma MouseListener, dodaj je i nasłuchuj na mouseClick – Telcontar

Odpowiedz

56

Jak o:

table.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 
    if (e.getClickCount() == 2) { 
     JTable target = (JTable)e.getSource(); 
     int row = target.getSelectedRow(); 
     int column = target.getSelectedColumn(); 
     // do some action if appropriate column 
    } 
    } 
}); 
+0

, jeśli mam Jlabel wewnątrz komórki tabeli, a następnie jak wywołać to kliknięcie na kliknięcie? – Krishna

+1

jak poniżej komentarz @Camickr, myślę, że lepiej jest użyć metody MousePressed, a nie MouseClick –

26

zasadniczo taka sama jak ta sugestia już zaakceptowanej wyjątkiem:

a) powinny obsługiwać mousePressed nie mouseClicked. Zdarzenie mouseClicked jest uruchamiane tylko wtedy, gdy zdarzenie mousePressed i mouseReleased jest generowane w tym samym miejscu piksela. Ty, jeśli użytkownik porusza myszą nawet o 1 piksel, a podwójne kliknięcie nie spowoduje oczekiwanego dwukrotnego kliknięcia.

b) Można również rozważyć użycie metod columnAtPoint() i rowAtPoint(), aby uzyskać klikniętą komórkę. Chociaż prawdopodobnie nie robi to różnicy w tym przypadku, będzie ważne, czy kiedykolwiek spróbujesz użyć MouseListener dla kliknięcia prawym przyciskiem myszy, ponieważ wybór nie zostanie zmieniony. Więc jeśli masz zwyczaj używania tej metody, nie będziesz miał problemów w przyszłości.