Java Swing JTable; kliknij prawym przyciskiem myszy Menu (Jak to zrobić, aby" wybrać " aka podświetlić wiersz)
Krótki: potrzebuję zdarzenia "kliknij prawym przyciskiem myszy", aby podświetlić wiersz komórki.
Używam JTable wewnątrz ScrollPane w Javie Swing (Netbeans Matisse). Mam ustawiony myszką słuchacz zdarzeń na JTable, który wykonuje następujące czynności:
if (evt.getButton() == java.awt.event.MouseEvent.BUTTON3) {
System.out.println("Right Click");
JPopUpMenu.show(myJTable, evt.getX(), evt.getY())
}
Problem w tym, że ... .. ilekroć wykonuję kliknięcie prawym przyciskiem myszy na JTable, wiersz nie jest podświetlony(ustawiam wybór na wiersze tylko btw). Szukałem kilku funkcji setSelected (), ale nie mogłem znaleźć odpowiedniej. Domyślnie kliknięcie lewym przyciskiem myszy automatycznie podświetla wiersz. Jak ustawić odpowiednie kliknięcia? 27
Author: Carlo del Mundo, 2010-08-24
2 answers
Tak:
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
int r = table.rowAtPoint(e.getPoint());
if (r >= 0 && r < table.getRowCount()) {
table.setRowSelectionInterval(r, r);
} else {
table.clearSelection();
}
int rowindex = table.getSelectedRow();
if (rowindex < 0)
return;
if (e.isPopupTrigger() && e.getComponent() instanceof JTable ) {
JPopupMenu popup = createYourPopUp();
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
});
......
80
Author: clamp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-15 20:52:47
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-15 20:52:47
Zaakceptowana odpowiedź nie uwzględnia klawiszy modyfikujących, takich jak ctrllub shift, jednak wskazują one, że bieżący wybór powinien nie być zastąpiony, ale rozszerzony.
Ponadto dodałem obsługę wielu systemów operacyjnych, sprawdzając mousePressed
oraz mouseReleased
.
Poniżej znajduje się pełny przykład dostosowywania zaznaczonych wierszy za pomocą ListSelectionModel
, w tym MouseEvent#getModifiers
czeki. Następnie można otworzyć (opcjonalnie) JPopupMenu
.
JPopupMenu contextMenu = new JPopupMenu();
// ...
// add elements to the popup menu
// ...
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
handleRowClick(e);
if (e.isPopupTrigger()) {
doPop(e);
} else {
hidePop();
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
doPop(e);
}
}
private void handleRowClick(MouseEvent e) {
ListSelectionModel selectionModel = table.getSelectionModel();
Point contextMenuOpenedAt = e.getPoint();
int clickedRow = table.rowAtPoint(contextMenuOpenedAt);
if (clickedRow < 0) {
// No row selected
selectionModel.clearSelection();
} else {
// Some row selected
if ((e.getModifiers() & InputEvent.SHIFT_MASK) == InputEvent.SHIFT_MASK) {
int maxSelect = selectionModel.getMaxSelectionIndex();
if ((e.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK) {
// Shift + CTRL
selectionModel.addSelectionInterval(maxSelect, clickedRow);
} else {
// Shift
selectionModel.setSelectionInterval(maxSelect, clickedRow);
}
} else if ((e.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK) {
// CTRL
selectionModel.addSelectionInterval(clickedRow, clickedRow);
} else {
// No modifier key pressed
selectionModel.setSelectionInterval(clickedRow, clickedRow);
}
}
}
private void doPop(MouseEvent e) {
if (table.getSelectedRowCount() == 0) {
return;
}
contextMenu.setVisible(true);
contextMenu.show(e.getComponent(), e.getX(), e.getY());
}
private void hidePop() {
contextMenu.setVisible(false);
}
});
1
Author: Markus Weninger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 16:49:29
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 16:49:29