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

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

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

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

那我怎么能在java中处理这个keypressed组合,请帮助….

如果你按下组合键意味着即使关闭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(); } 

}

如果您不想在按下alt + f4时关闭窗口,您只需要将键绑定添加到窗口的子元素。但是您需要使用键绑定来执行alt + f4按事件,因为动作列表器不是能够做到这一点。我猜是因为当你按下那个键时它会失去焦点。 窗口保持不关闭,如果它听到按下事件,即使对于alt + f4。你可以添加keylistner到子组件,如下所示。

 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(); } } 

输出>>

在此处输入图像描述