Как адаптировать действие щелчка левой кнопкой мыши на JTable к щелчку правой кнопкой мыши в Java?
У меня есть JTable
который я хочу, чтобы щелкнуть левой кнопкой мыши и правой кнопкой мыши JPopupMenu
в теме. Обычно щелкнув левой кнопкой мыши на JTable, вы можете выбрать строку. Я хотел бы сделать то же самое с правой кнопкой мыши плюс показать всплывающее меню.Кто-нибудь знает, как это сделать?
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
//this line gives wrong result because table.getSelectedRow() stay alwase on the same value
codeModel.setSelectedFileName(table.getValueAt(table.getSelectedRow(), 0).toString());
JPopupMenu popup = createRightClickPopUp();
popup.show(e.getComponent(), e.getX(), e.getY());
}else{
codeModel.setSelectedFileName(table.getValueAt(table.getSelectedRow(), 0).toString());
codeTextArea.setText(codeModel.getCodeContents());
}
}
});
3 ответа
Решение
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) { //or mouseReleased(MouseEvent e)
if (SwingUtilities.isRightMouseButton(e)) {
//-- select a row
int idx = table.rowAtPoint(e.getPoint());
table.getSelectionModel().setSelectionInterval(idx, idx);
//---
codeModel.setSelectedFileName(table.getValueAt(table.getSelectedRow(), 0).toString());
JPopupMenu popup = createRightClickPopUp();
popup.show(e.getComponent(), e.getX(), e.getY());
}else{
codeModel.setSelectedFileName(table.getValueAt(table.getSelectedRow(), 0).toString());
codeTextArea.setText(codeModel.getCodeContents());
}
}
});
пожалуйста, прочитайте мой вопрос JTable с JPopupMenu
наиболее важным является тип ListSelectionModel
незначительный по вашему вопросу, но оба ответа там верны и хороши
Вы можете легко определить строку, по которой щелкнули, используя JTable.rowAtPoint(event.getPoint()) в вашем прослушивателе мыши.