2011-07-18 14 views
4

JFrameを作成してJMenuBarを配置すると、「Ctrl + C」アクセラレータ付きの「コピー」メニュー項目が追加されます。完全なソースコードは以下に貼り付けられています。 JFrame内でドラッグアンドドロップすると、キーボードのCtrl + Cを押すのと同じように、「Ctrl + C」アクセラレータがトリガーされていることがわかります(ActionEventはコンソールに表示されているので)。Java Swing:なぜJFrameのドラッグ&ドロップが「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); 
    } 
} 
+3

投稿したコードはこれで動作しますか? Javaでドラッグ&ドロップを試した最後のときに、 'TransferHandler'を使ってかなりのコードが必要だったので尋ねるだけです。 –

+0

私はJamesの2番目の声明です。上記の投稿されたコードで問題を再現することができません。ドラッグアンドドロップを許可していない可能性があります。 –

+0

どのOSをお使いですか? –

答えて

1

数日前、私は同様の問題がありました。しかし、Event.CTRL_MASKのパラメータをKeyEvent.CTRL_DOWN_MASKに変更して解決しました。これはよく知られているバグですが、私のオプションは何の問題もなく私の場合に動作するかどうか、私は知りません

sousMenu = new JMenuItem("Nouveau", KeyEvent.VK_N); 
    sousMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, 
             KeyEvent.CTRL_DOWN_MASK)); 
    sousMenu.setName(Modele.ID_NOUVEAU); 
    sousMenu.addActionListener(this); 
    menu.add(sousMenu); 
    /** Modele is a singleton class with my constants 
    * My frame class implements ActionListener 
    * The KeyEvent.VK_N parameter in the constructor sets the mnemonic 
    */ 

:私の最終的なコードは以下の通りでした。

幸いです!

関連する問題