Mac OS で swing アプリケーションを作成していて、ctrl キーを押しながらクリックしたときと右クリックしたときに、JList にコンテキスト メニューを表示したいと考えています。ここでの問題は、ctrl-click が常に選択をクリアすることです。
選択に関して、ctrl クリックを右クリックのように動作させる簡単な方法はありますか?
Mac OS で swing アプリケーションを作成していて、ctrl キーを押しながらクリックしたときと右クリックしたときに、JList にコンテキスト メニューを表示したいと考えています。ここでの問題は、ctrl-click が常に選択をクリアすることです。
選択に関して、ctrl クリックを右クリックのように動作させる簡単な方法はありますか?
これを実現するためのはるかに簡単な方法があります: を使用するsetComponentPopupMenu
と、余分な作業と OS 固有の右クリックの問題がすべて処理されます。
Windows と Mac の両方でテストしました (動作します):
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
public class TestJPopup {
protected void initUI() {
JFrame frame = new JFrame(TestJPopup.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPopupMenu popupMenu = new JPopupMenu();
popupMenu.add(new JMenuItem("One"));
popupMenu.add(new JMenuItem("Two"));
popupMenu.add(new JMenuItem("Three"));
JList list = new JList(new String[] { "Hello", "World", "Something", "Else", "Out", "Of", "Ideas" });
list.setComponentPopupMenu(popupMenu);
frame.add(list);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestJPopup().initUI();
}
});
}
}
別の方法として (役に立たないように見えますが)、 メソッドjava.awt.event.MouseEvent.isPopupTrigger()
を使用して、 a を表示するかどうかを知ることができますJPopupMenu
。