如题。在swing中如何屏蔽掉windows的快捷键?
比如swing程序在运行的时候win、alt tab、和esc等快捷键失效。
如果觉得分不够可以令开帖给分。
我的等级不够,一次只能100分。

解决方案 »

  1.   

    当按键被按下时,会产生key event,被按下的键是由keycode属性指定的,而代表此按键的virtual key code可由key event的getKeyCode()获得,每个KeyEvent定义了多个static int常数,每个均以VK开头,代表Virtual key。例如你按下的是WIN,getKeyCode()返回的值就是KeyEvent.VK_WIN的值,你就能取得用户按下的键了,想屏蔽,你就在事件中什么都不做就好了。希望能帮到你
      

  2.   

    win和alt+tab等应该是操作系统的本地回调,而不是你程序的回调,所以你只能是调用winapi,所以只能用jni实现。
      

  3.   

    #5最好给个例子出来,前几天我也问了LZ类似的问题,但是不是一模一样的,我是针对jtable屏蔽所有的键盘输入键,问题解决了,当时我也用了类似#5的方法,理论上是可以的,但是代码中是行不通的,最后我解决的方法是继承了BasicTableUI类然后屏蔽了所有的在jtable上的键盘动作,但是这个不适合LZ的用处,希望能带给你点启发。
      

  4.   

    终于有时间上来了,现在采用的方案基本上是5楼的方案。但是还有一个问题。就是无法捕获到win+D这个快捷键。郁闷啊。
      

  5.   

    屏蔽不掉的,用JNI,你想自己做一个桌面吗
      

  6.   

    已经做出来了,只是还有这个屏蔽win快捷键的功能没有实现
      

  7.   

    不敢用jni啊  这个东西不稳定啊。用过jni但是时不时的报内存read错误。.net又不是很熟悉啊。所以不敢用啊
      

  8.   

    InputMap inputMap = this.textarea.getInputMap(); 
      inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_C,
        KeyEvent.CTRL_DOWN_MASK), "CTRL_C");
      

  9.   

    针对的对象是JFrame不是TextField
      

  10.   

    可以自己注册键盘事件,然后在处理的时候判断如果是快捷键就调用事件的consume()方法注销键盘事件,因为后自定义的事件处理监听器会先系统处理监听器运行
      

  11.   

    用5楼的方法,你可以屏蔽tab之类的键,但无法屏蔽WIN键。因为tab之类的键是独享的,也就是只作用于当前焦点的程序。但win键则直接被操作系统接收并作出反应,所以即使你在程序里屏蔽了win键,但操作系统依然会响应这个键。你只能调用win api,去中途拦截这个键的信号