getselectedrow from evento event editable doble java swing jtable double-click listselectionlistener

from - Hacer doble clic en el oyente en JTable en Java



java get row from jtable (3)

@MooHa Tu clase ListDataUI debería implementar MouseListener.

Tengo curiosidad sobre cómo llamar valueChanged método valueChanged solo si se ha hecho doble clic en una fila en JTable . Por ahora, el fragmento de código siguiente logra una acción de un clic o una tecla de flecha de evento para navegar por una lista de personas y ajustar JLabel consecuencia. Lo que trato de hacer es algo similar, como lo hice con un solo clic, pero esta vez SI y ÚNICAMENTE SI se ha hecho doble clic en una fila, cambiaría para que no ocurra nada. Cómo hago esto :(

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 { } } }); }

no estoy seguro del resto de arriba ...


Prueba esto:

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 } } });


Reubique el código del controlador de eventos en un método privado en su clase de host, luego implemente el MouseListener o extienda el MouseAdapter luego invoque el método privado allí. El primer paso (es decir, crear el método privado lo ayuda a invocar la misma lógica desde múltiples manejadores de eventos).

Detectar el doble clic en MouseHandler es fácil gracias a la llamada a MouseEvent.getClickCount()