在Java中处理键盘键ALT + F4组合

时间:2014-10-25 05:56:51

标签: java swing keylistener

我是一名Windows用户,当我按下时,我不想关闭我的jframe ALT + F4

public void keyPressed(KeyEvent e) {
 if (KeyEvent.VK_SPACE, java.awt.event.InputEvent.CTRL_DOWN_MASK){
 }
}

获取击键并处理/停止关闭或切换jframe

那么如何在java中处理这个keypressed组合, 请帮帮....

2 个答案:

答案 0 :(得分:2)

如果您不想在按 alt + f4 时关闭窗口,您需要做的就是添加密钥绑定到窗口的子元素。但是你需要使用键绑定 alt + f4 按事件,因为动作列表器无法做到it.i猜测,因为当你按下那个键时它会失去焦点。即使 alt + f4 ,如果它听新闻事件,也不会关闭窗口。你可以将密钥列表添加到子组件,如下所示。

childComponent.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.ALT_DOWN_MASK), "stopclose");

childComponent.getActionMap().put("stopclose", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("i'm waiting ");
    }
});

并完成示例

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.KeyStroke;

public class NoExit {

    public NoExit() {
        JFrame f = new JFrame();
        f.setLayout(new GridLayout(2, 2));
        JLabel lable = new JLabel("i will not exit for your  ALT + F4 command");
        lable.setBackground(Color.GRAY);
        lable.setOpaque(true);
        lable.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.ALT_DOWN_MASK), "stopclose");
        lable.getActionMap().put("stopclose", new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("i'm waiting ");
            }
        });
        f.add(lable);
        f.setVisible(true);
    }
    public static void main(String[] args) {
        new NoExit();
    }

}

输出>>

enter image description here

答案 1 :(得分:1)

如果您按下组合键意味着即使关闭X也不起作用,前一个将锁定关闭。因此以下 审查:基于快速蜗牛答案更好:

public class OnKeyAltF4DontClose2 extends JFrame {//implements  WindowListener {

public OnKeyAltF4DontClose2() {
    setVisible(true);
    setDefaultCloseOperation(3);
    setBounds(400,400,400,400);



    addKeyListener(new KeyAdapter(){
        public void keyPressed(KeyEvent e) {

            if(((KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, java.awt.event.InputEvent.ALT_DOWN_MASK)) != null)  &&  e.getKeyCode() == KeyEvent.VK_F4){

            e.consume();
            }

            }

    });

}
public static void main(String[] args) {
    new OnKeyAltF4DontClose2();

}

}