Saat ini saya membuat menu konteks klik kanan dengan membuat instance baru JMenu
di klik kanan dan menyetel lokasinya ke posisi mouse ... Adakah cara yang lebih baik?
sumber
Saat ini saya membuat menu konteks klik kanan dengan membuat instance baru JMenu
di klik kanan dan menyetel lokasinya ke posisi mouse ... Adakah cara yang lebih baik?
Anda mungkin memanggil setVisible(true)
menu secara manual . Itu dapat menyebabkan beberapa perilaku buggy yang buruk di menu.
The show(Component, int x, int x)
Metode menangani semua hal yang Anda perlu terjadi, (Menyoroti hal-hal di mouseover dan menutup popup bila perlu) di mana menggunakansetVisible(true)
hanya menunjukkan menu tanpa menambahkan perilaku tambahan.
Untuk membuat menu popup klik kanan, cukup buat file JPopupMenu
.
class PopUpDemo extends JPopupMenu {
JMenuItem anItem;
public PopUpDemo() {
anItem = new JMenuItem("Click Me!");
add(anItem);
}
}
Kemudian, yang perlu Anda lakukan adalah menambahkan kustom MouseListener
ke komponen yang Anda inginkan untuk menu pop-up.
class PopClickListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger())
doPop(e);
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger())
doPop(e);
}
private void doPop(MouseEvent e) {
PopUpDemo menu = new PopUpDemo();
menu.show(e.getComponent(), e.getX(), e.getY());
}
}
// Then on your component(s)
component.addMouseListener(new PopClickListener());
Tentu saja tutorialnya memiliki penjelasan yang sedikit lebih mendalam .
Catatan: Jika Anda melihat bahwa menu popup muncul jauh dari tempat pengguna mengklik, coba gunakan metode e.getXOnScreen()
dan e.getYOnScreen()
untuk koordinat x dan y.
PopClickListener
meluasMouseAdapter
?component
?Pertanyaan ini agak tua - begitu pula jawabannya (dan juga tutorialnya)
Api saat ini untuk menyetel popupMenu di Swing adalah
Dengan cara ini akan ditampilkan secara otomatis, baik untuk pemicu mouse dan keyboard (yang terakhir bergantung pada LAF). Plus, ini mendukung penggunaan kembali popup yang sama di seluruh anak wadah. Untuk mengaktifkan fitur itu:
sumber
JTable
sehingga muncul di baris yang dipilih atau di baris di mana Anda klik kanan? Atau dalam skenario ini, metode lama yang akan dipilih?Ada bagian tentang Memunculkan Menu Popup di artikel Cara Menggunakan Menu dari Tutorial Java yang menjelaskan cara menggunakan
JPopupMenu
kelas.Kode contoh dalam tutorial menunjukkan cara menambahkan
MouseListener
s ke komponen yang seharusnya menampilkan menu pop-up, dan menayangkan menu yang sesuai.(Metode yang Anda gambarkan cukup mirip dengan cara tutorial menyajikan cara menampilkan menu pop-up pada suatu komponen.)
sumber
Kode berikut mengimplementasikan menu konteks default yang dikenal
Windows
dengan fungsi salin, potong, tempel, pilih semua, batalkan, dan ulangi. Ini juga berfungsi padaLinux
danMac OS X
:Pemakaian:
Sekarang
textArea
akan memiliki menu konteks saat diklik kanan.sumber
releasedEvent.isPopupTrigger()
alih-alihreleasedEvent.getButton() == MouseEvent.BUTTON3
berfungsi dengan baik di semua platform.pressedEvent.getModifiersEx() & Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()
harus ada keduanyaEx
atau tidakEx
. TheEx
versigetMenuShortcutKeyMask()
ini hanya tersedia sejak java 10 +.Saya akan mengoreksi penggunaan untuk metode yang disarankan @BullyWillPlaza. Alasannya adalah ketika saya mencoba menambahkan textArea ke hanya contextMenu itu tidak terlihat, dan jika saya menambahkannya ke kedua contextMenu dan beberapa panel itu ecounters: Asosiasi ganda induk yang berbeda jika saya mencoba untuk beralih ke editor Desain.
Jadikan pendengar mouse seperti ini untuk objek teks yang perlu Anda aktifkan popupnya. Apa yang akan dilakukan adalah ketika Anda mengklik kanan pada objek teks Anda, ia akan menambahkan popup itu dan menampilkannya. Dengan cara ini Anda tidak menemukan kesalahan itu. Solusi yang dibuat oleh @BullyWillPlaza sangat bagus, kaya, dan cepat diimplementasikan di program Anda sehingga Anda harus mencobanya, lihat seberapa suka Anda.
sumber