4
我創建一個JFrame並放入一個JMenuBar,添加一個帶有「Ctrl + C」加速器的「複製」菜單項。完整的源代碼粘貼在下面。當我在JFrame中拖放時,我可以看到「Ctrl + C」加速器被觸發(因爲ActionEvent被打印在控制檯中),就像你在鍵盤上按下Ctrl + C一樣。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);
}
}
這是否與您發佈的代碼一起工作?只是問,因爲上次我嘗試在Java中進行拖放時,它需要使用「TransferHandler」的相當多的代碼。 –
我第二次詹姆斯的發言。我無法用上面的發佈代碼重現您的問題,也許是因爲它不允許拖放操作。 –
你正在使用哪個操作系統? –