Haga doble clic escucha en la JTable en Java

Tengo curiosidad por saber cómo llamar a valueChanged reemplazado método sólo si una fila en JTable ha sido doble clic. Por ahora, el siguiente fragmento de código se logra un clic en la acción o evento de la tecla de flecha para navegar a través de una lista de personas y ajustar JLabel en consecuencia. Lo que estoy tratando de hacer es algo similar como yo lo hice para un solo clic, pero esta vez SI y SÓLO SI una fila ha sido doble clic dto iba a cambiar otra cosa no sucede nada. ¿Cómo puedo hacer 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 de que el resto de arriba…

  • Un MouseListener parece más apropiado.
  • sí, pero seguro acerca del ajuste de la parte para obtener la fila
  • ¿Cuál es el problema de hacer la fila? Tampoco es que se ha seleccionado y se puede conseguir con JTable.getSelectedRow() o utiliza el ratón los puntos de evento y el método: docs.oracle.com/javase/7/docs/api/javax/swing/…
InformationsquelleAutor MooHa | 2013-02-13

3 Kommentare

  1. 78

    Intente 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 
            }
        }
    });
    • debe agregar && fila!=-1
    • La explicación es, que la tabla puede tener un cierto tamaño, pero en su interior los datos no completamente y visualmente llenar. Así que si el usuario hace clic fuera del área de datos, pero todavía dentro de la tabla, el retorno de valor de la fila es -1, que debe ser manejada.
  2. 2

    Reubicar el código del controlador de eventos a un método privado en su host de la clase, para luego implementar la MouseListener o ampliar la MouseAdapter, a continuación, invocar el método privado no. El primer paso (es decir, la creación de la privada método ayuda a invocar la misma lógica de varios manejadores de eventos).

    La detección de la doble clic en el MouseHandler es fácil por la llamada a la MouseEvent.getClickCount()

    • véase mi edición, no estoy seguro de cómo llamar a getSelectedDTo sólo si se hace doble clic

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea