我是一名Windows用户,当我按下时,我不想关闭我的jframe ALT + F4 ,
public void keyPressed(KeyEvent e) {
if (KeyEvent.VK_SPACE, java.awt.event.InputEvent.CTRL_DOWN_MASK){
}
}
获取击键并处理/停止关闭或切换jframe
那么如何在java中处理这个keypressed组合, 请帮帮....
答案 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();
}
}
输出>>
答案 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();
}
}