当按下键盘上的某些键时,如何在 JavaFX 应用程序(舞台)中触发事件?
How to trigger an event in a JavaFX Application (Stage) when some keys are pressed on the KeyBoard?
我正在尝试在我正在处理的应用程序上设置后门。
我想在用户按下 "CTRL + ALT + F12" 时加载新的 Window。
这是我到目前为止尝试过的方法,尽管它非常糟糕。
//packages
import java.awt.EventQueue;
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
//...
private void setupBackPass(){
HashMap<KeyStroke, Action> actionMap = new HashMap<KeyStroke, Action>();
KeyStroke key1 = KeyStroke.getKeyStroke(KeyEvent.ALT, KeyEvent.CTRL_DOWN_MASK);
actionMap.put(key1, new AbstractAction("action1") {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Ctrl-ALT pressed: " +e);
}
});
KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
kfm.addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
KeyStroke keyStroke = KeyStroke.getKeyStrokeForEvent(e);
if(actionMap.containsKey(keyStroke)){
final Action a = actionMap.get(keyStroke);
final ActionEvent ae = new ActionEvent(e.getSource(), e.getID(), null);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
}
});
return false;
}
});
});
}
我不确定该怎么做,但我希望如果按下按键,则应该打开一个超级管理员 window。
从您发布的代码看来,您使用的是 Swing 而 不是 JavaFX。看起来您也在尝试使用 Key Bindings。如 link 中所述,您需要同时修改 输入映射 和 动作映射 。此外,您不创建动作图,而是使用现有的动作图。同样,在我提供 link 的页面中对此进行了解释。
我正在尝试在我正在处理的应用程序上设置后门。
我想在用户按下 "CTRL + ALT + F12" 时加载新的 Window。 这是我到目前为止尝试过的方法,尽管它非常糟糕。
//packages
import java.awt.EventQueue;
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
//...
private void setupBackPass(){
HashMap<KeyStroke, Action> actionMap = new HashMap<KeyStroke, Action>();
KeyStroke key1 = KeyStroke.getKeyStroke(KeyEvent.ALT, KeyEvent.CTRL_DOWN_MASK);
actionMap.put(key1, new AbstractAction("action1") {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Ctrl-ALT pressed: " +e);
}
});
KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
kfm.addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
KeyStroke keyStroke = KeyStroke.getKeyStrokeForEvent(e);
if(actionMap.containsKey(keyStroke)){
final Action a = actionMap.get(keyStroke);
final ActionEvent ae = new ActionEvent(e.getSource(), e.getID(), null);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
}
});
return false;
}
});
});
}
我不确定该怎么做,但我希望如果按下按键,则应该打开一个超级管理员 window。
从您发布的代码看来,您使用的是 Swing 而 不是 JavaFX。看起来您也在尝试使用 Key Bindings。如 link 中所述,您需要同时修改 输入映射 和 动作映射 。此外,您不创建动作图,而是使用现有的动作图。同样,在我提供 link 的页面中对此进行了解释。