Double click listener on JTable in Java
Solution 1
Try this:
mytable.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent mouseEvent) {
JTable table =(JTable) mouseEvent.getSource();
Point point = mouseEvent.getPoint();
int row = table.rowAtPoint(point);
if (mouseEvent.getClickCount() == 2 && table.getSelectedRow() != -1) {
// your valueChanged overridden method
}
}
});
Solution 2
Relocate the code of the event handler into a private method in your host class, then implement the MouseListener
or extend the MouseAdapter
then invoke the private method there. The first step (i.e. creating the private method helps you invoke the same logic from multiple event handlers).
Detecting the double click in the MouseHandler
is made easy by the call to MouseEvent.getClickCount()
MooHa
I am a student in my final-year of bachelors degree studying ICT :) I enjoy programming a lot, and due to starting career as graduate developer soon. So my intention here is to learn from you experts on a daily basis.
Updated on April 23, 2020Comments
-
MooHa about 4 years
I am curious as to how to call
valueChanged
overridden method only if a row inJTable
has been double clicked. For now the below code snippet achieves one click action or event arrow key to navigate through a list of people and would adjustJLabel
accordingly. What I'm trying to do is something similar just like I did for one click, but this time IF and ONLY IF a row has been double clickeddto
would change else nothing happens. How do I do this :(class ListDataUI { public void addListSelectionListener(ListSelectionListener listSelectionListener) { summaryTable.getSelectionModel().addListSelectionListener(listSelectionListener); public T getSelectedDTO() { final int selectedRowIndex = summaryTable.getSelectedRow(); if (selectedRowIndex != -1) { return data.get(summaryTable.convertRowIndexToModel(selectedRowIndex)); } else { return null; } } } } class MainMenu extends javax.swing.JFrame { private void initListeners() { searchTable.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { AcademicDTO dto = (AcademicDTO) searchTable.getSelectedDTO(); acImgLabel.setIcon(new ImageIcon()); label_name.setText(dto.getTitle() + " " + dto.getForename() + " " + dto.getSurname()); label_role.setText("Role: " + dto.getRole()); label_phone.setText("Phone: " + dto.getPhone()); label_room.setText("Room: " + dto.getRoom()); label_hours.setText("Hours: " + dto.getHours()); label_mobile.setText("Mobile: " + dto.getMobile()); if (dto.getImage() != null) { acImgLabel.setIcon(new ImageIcon(dto.getImage())); } } } }); } } private void initListeners() { contactTable.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ContactDTO dto = (ContactDTO) contactTable.getSelectedDTO(); if (e.getClickCount() == 2) { System.out.println(dto.getForename()); } else { } } }); }
not sure of the rest above...
-
MooHa over 11 yearssee my edit, I am not sure how to call getSelectedDTo only if double clicked
-
Ofek Ron almost 9 yearsshould add && row!=-1
-
hamena314 over 8 years@OfekRon: Explanation is, that the table might have a certain size, but the data inside does not completely and visually fill it out. So if the user clicks outside of the data area but still inside of the table, the return-value of the row is
-1
, which should be handled.