大家好。我是新人,我在编程的时候于到了一个问题一直无法解决。
程序是这样的,我写了个记事本。本想用CTRL+H的组合热来激发菜单点击,代码vk 下:
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_DOWN_MASK));
但事与愿违,这当好是系统的热键,当按下这个组合键时,成了系统默认的退格工功,而不是我自己定意的Action事件。郁闷死了,望高手帮忙啊。谢谢了。
程序是这样的,我写了个记事本。本想用CTRL+H的组合热来激发菜单点击,代码vk 下:
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_DOWN_MASK));
但事与愿违,这当好是系统的热键,当按下这个组合键时,成了系统默认的退格工功,而不是我自己定意的Action事件。郁闷死了,望高手帮忙啊。谢谢了。
解决方案 »
- 求助:ArrayList里的toArray()方法
- map to pojo(在线等)
- 我想根据当前日期 取到前一日 前一月 前一年 应该怎么做?
- 写一个网络文件传输软件遇到的几个棘手问题,刚注册分不多,跪求高手相助!!!!!
- jacob如何转换word文件为html?帮忙看看下面的代码
- 要对数据包进行操作要用什么函数或者api啊
- java Double.parseDouble(s)s为整数时如何格式化整数
- 关于高等数学中积分的问题,不知道发什么地方,就发这里吧!
- 请问http://china-programer.myrice.com为什么进不进去?
- 关于for(String f : A)错误,请大家帮助
- 哪位给看看这个小代码为什么不能运行
- 如何将加密的class文件反编译成.java文件,急。。。。
就会屏蔽系统默认的你可以用addKeyListener
也可以用InputMap和ActionMap
下面方法行不通,还是系统热键代替了自定义热键。下面方法代码如下。我想我应该没写错代码。
public class test5 {
public static void main(String[] args) {
JFrame f = new JFrame();
JTextArea ta = new JTextArea();
f.setBounds(100, 100, 400, 300);
f.add(new JScrollPane(ta));
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
InputMap imap = ta.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK),"abc");
ActionMap amap = ta.getActionMap();
amap.put("abc", new Test5Action());
} static class Test5Action extends AbstractAction {
public void actionPerformed(ActionEvent e) {
System.out.println("自定义事件");
}
}
}
keylistener 确实不能屏蔽系统热键InputMap ActionMap 可以 Ctrl + c Ctrl + v Ctrl + H 通过/**
*
*/
package test4;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;public class test2
{
public static void main(String[] args)
{
JFrame f = new JFrame("test"); JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("Test"); menuBar.add(menu); JMenuItem menuItem = new JMenuItem("test");
menuItem.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e)
{
System.out.println("1233333333333");
} });
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,
KeyEvent.CTRL_DOWN_MASK));
menu.add(menuItem); f.setJMenuBar(menuBar);
JTextArea area = new JTextArea();
ActionMap actionMap = area.getActionMap();
InputMap inputMap = area.getInputMap();
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_DOWN_MASK), "CTRL_H");
actionMap.put("CTRL_H", new AbstractAction(){ public void actionPerformed(ActionEvent e)
{
System.err.println("123333333333");
}});
f.add(area); f.setSize(500, 500);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true); }
}
这个可能跟area底层有关系~~
你把JScrollPane或者JFrame setFocusable(true) 使能获得焦点