table.setOnKeyPressed(new EventHandler<KeyEvent>() {
// final KeyCombination kb = new KeyCodeCombination(KeyCode.P, KeyCombination.CONTROL_DOWN);
// final KeyCombination k = new KeyCodeCombina
public void handle(KeyEvent key) {
if (key.getCode() == KeyCode.P && key.isControlDown()) {
//My Code
}
}
});
我想用Ctrl + P + X
的快捷键组合来调用事件答案 0 :(得分:2)
实际上有点难以理解Ctrl + P + X的含义。我将假设它意味着你按ctrl,然后你按p,然后按x(可能会在按x之前释放p)。我还假设订单很重要,例如按ctrl,然后按x然后按p将不计数。无论如何,我的一些猜测,也许不完全是你想要的,但希望你能得到所提供解决方案的要点,并能够适应你的情况。
该解决方案监控按键和释放按键,以便它可以跟踪按键的状态,以确定按键组合是否触发。
import javafx.application.Application;
import javafx.beans.property.*;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.time.LocalTime;
public class KeyCombo extends Application {
KeyCombination ctrlP = KeyCodeCombination.keyCombination("Ctrl+P");
KeyCombination ctrlX = KeyCodeCombination.keyCombination("Ctrl+X");
@Override
public void start(Stage stage) throws Exception {
Label lastPressedLabel = new Label();
TextField textField = new TextField();
BooleanProperty pDown = new SimpleBooleanProperty(false);
textField.setOnKeyPressed(event -> {
if (ctrlP.match(event)) {
pDown.set(true);
}
if (pDown.get() && ctrlX.match(event)) {
pDown.set(false);
lastPressedLabel.setText(
LocalTime.now().toString()
);
}
});
textField.setOnKeyReleased(event -> {
if (!event.isControlDown()) {
pDown.set(false);
}
});
VBox layout = new VBox(10,
new Label("Press Ctrl+P+X"),
textField,
lastPressedLabel
);
layout.setPadding(new Insets(10));
Scene scene = new Scene(layout);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
如果可以,我建议尝试使用更简单的控制方案,例如:只需按Ctrl + P或Ctrl + X(键码组合事件匹配直接支持),而不是使用Ctrl + P + X的复合控制方案。