स्वीकार किए जाते हैं जवाब ctrl या खाते में पारी तरह संशोधक कुंजियों नहीं ले करता है, फिर भी वे संकेत मिलता है कि वर्तमान चयन को प्रतिस्थापित किया जाना चाहिए, लेकिन विस्तारित होना चाहिए।
इसके अलावा, मैंने mousePressed
औरmouseReleased
की जांच करके बहु-ओएस समर्थन जोड़ा।
निम्नलिखित, चेक सहित ListSelectionModel
का उपयोग करके चयनित पंक्तियों को समायोजित करने के तरीके पर आप एक पूर्ण उदाहरण पा सकते हैं। उसके बाद, एक (वैकल्पिक) 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);
}
});
स्रोत
2016-08-01 16:42:36
बस इसी तरह:] ... माउस के शीर्ष आधे रील किए गए() की मुझे आवश्यकता है। मतदान किया जाएगा + एक जवाब के रूप में स्वीकार किया जाएगा। धन्यवाद, आप आदमी (या महिला) हैं! –
ग्रेट उत्तर। एक विवरण: कुछ प्लेटफ़ॉर्म (मैक ओएस एक्स इसे नाम देने के लिए) पर, पॉपअप मेनू 'माउस रीलेज्ड' की बजाय 'माउस दबाए गए 'द्वारा ट्रिगर किया जाता है, इसलिए यदि आप इस कोड का उपयोग करते हैं तो पॉपअप दिखाई नहीं देगा यदि आप मैक ओएस पर अपना एप्लिकेशन चलाते हैं एक्स – gabuzo
पंक्ति इंडेक्स को दो बार प्राप्त करने का क्या उद्देश्य है? मेरा मतलब है, * आर * और * rowindex * के बीच क्या अंतर है? –