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