如何在javafx中结合Ctrl+;P+;X table.setOnKeyPressed(新的EventHandler(){ //final KeyCombination kb=新的keycodecompbination(KeyCode.P,KeyCombination.CONTROL\u DOWN); //最终密钥组合k=新密钥编码组合 公共无效句柄(KeyEvent密钥){ if(key.getCode()==KeyCode.P&&key.isControlDown()){ //我的代码 } } });

如何在javafx中结合Ctrl+;P+;X table.setOnKeyPressed(新的EventHandler(){ //final KeyCombination kb=新的keycodecompbination(KeyCode.P,KeyCombination.CONTROL\u DOWN); //最终密钥组合k=新密钥编码组合 公共无效句柄(KeyEvent密钥){ if(key.getCode()==KeyCode.P&&key.isControlDown()){ //我的代码 } } });,javafx,Javafx,我想用Ctrl+p+X的快捷键组合来调用该事件。实际上,要理解Ctrl+p+X的含义有点困难。我假设这意味着你按ctrl键,然后按p键,然后按x键(可能在按x键之前释放p键)。我还假设顺序很重要,例如,按ctrl键,然后按x键,然后按p键不算。无论如何,我有一点猜测,也许不完全是你想要的,但希望你能得到提供的解决方案的要点,并能够适应你的情况 该解决方案监控按键和释放,以便跟踪按键的状态以确定是否触发按键组合 table.setOnKeyPressed(new EventHandler<K

我想用Ctrl+p+X的快捷键组合来调用该事件。实际上,要理解Ctrl+p+X的含义有点困难。我假设这意味着你按ctrl键,然后按p键,然后按x键(可能在按x键之前释放p键)。我还假设顺序很重要,例如,按ctrl键,然后按x键,然后按p键不算。无论如何,我有一点猜测,也许不完全是你想要的,但希望你能得到提供的解决方案的要点,并能够适应你的情况

该解决方案监控按键和释放,以便跟踪按键的状态以确定是否触发按键组合

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或Ctrl+X(这直接由键代码组合事件匹配支持),而不是使用Ctrl+p+X的复合控制方案。

谢谢。但这不是我想要的。我尝试同时按下这些键,即按Ctrl+Alt+del的方式进行事件。但是我不想使用Alt修饰符,而是希望按下P。按P+Ctrl+X的顺序按下时,它也能工作吗?(与Alt+Ctrl+Del的工作方式相同)我相信您可以调整解决方案以获得您想要的结果。
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);
    }

}