JFrame を作成し、そこに JMenuBar を配置すると、「Ctrl+C」アクセラレータを使用した「コピー」メニュー項目が追加されます。完全なソース コードを以下に貼り付けます。JFrame 内でドラッグ アンド ドロップすると、「Ctrl+C」アクセラレータがトリガーされていることがわかります (ActionEvent がコンソールに出力されるため)。これは、キーボードで Ctrl+C を押すのと同じです。
これは非常に奇妙な動作だと思います。なぜマウス操作がそのホットキーをトリガーするのか理解できませんでした。バグですか?
public class Test {
public static void main(String[] args) {
final JFrame jf = new JFrame("Test");
final JMenuBar menuBar = new JMenuBar();
jf.setJMenuBar(menuBar);
final JMenu menu = new JMenu("Edit");
menuBar.add(menu);
final JMenuItem copyItem = new JMenuItem("Copy");
copyItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(e);
}
});
copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK));
menu.add(copyItem);
jf.setPreferredSize(new Dimension(400, 300));
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}