webentwicklung-frage-antwort-db.com.de

Doppelklicken Sie in Java auf JTable

Ich bin gespannt, wie man die überschriebene Methode valueChanged nur dann aufruft, wenn eine Zeile in JTable doppelt angeklickt wurde. Mit dem folgenden Code-Snippet können Sie zunächst mit einem Klick auf die Aktion oder die Ereignis-Pfeiltaste durch eine Liste von Personen navigieren und JLabel entsprechend anpassen. Was ich versuche, ist etwas Ähnliches, wie ich es mit einem Klick getan habe, aber dieses Mal WENN und NUR WENN eine Zeile doppelt angeklickt wurde dto würde sich nichts ändern, sonst passiert nichts. Wie mache ich das :(

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

        }
    });
}

ich bin mir nicht sicher über den Rest ...

28
MooHa

Versuche dies:

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 
        }
    }
});
75
Anupam Maiti

Verschieben Sie den Code des Ereignishandlers in eine private Methode in Ihrer Host-Klasse, implementieren Sie dann MouseListener oder erweitern Sie MouseAdapter und rufen Sie dort die private Methode auf. Der erste Schritt (d. H. Das Erstellen der privaten Methode hilft Ihnen, dieselbe Logik von mehreren Ereignishandlern aufzurufen).

Das Erkennen des Doppelklicks im MouseHandler wird durch den Aufruf von MouseEvent.getClickCount() erleichtert.

2
Waleed Madanat