web-dev-qa-db-fra.com

Écouteur double-clic sur JTable dans Java

Je suis curieux de savoir comment appeler la méthode surchargée valueChanged uniquement si une ligne dans JTable a été double-cliquée. Pour l'instant, l'extrait de code ci-dessous réalise une action en un clic ou une touche de flèche d'événement pour parcourir une liste de personnes et ajusterait JLabel en conséquence. Ce que j'essaie de faire est quelque chose de similaire, comme je l'ai fait pour un seul clic, mais cette fois SI et UNIQUEMENT SI une ligne a été double-cliquée dto changerait sinon rien ne se passe. Comment puis-je faire cela :(

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

        }
    });
}

pas sûr du reste ci-dessus ...

28
MooHa

Essaye ça:

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

Relocalisez le code du gestionnaire d'événements dans une méthode privée de votre classe Host, puis implémentez le MouseListener ou étendez le MouseAdapter puis invoquez-y la méthode privée. La première étape (c'est-à-dire la création de la méthode privée vous aide à invoquer la même logique à partir de plusieurs gestionnaires d'événements).

La détection du double clic dans MouseHandler est facilitée par l'appel à MouseEvent.getClickCount()

2
Waleed Madanat