如何使用Ctrl + P + X的组合在javafx中添加快捷方式事件

时间:2014-11-07 19:06:33

标签: javafx

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

的快捷键组合来调用事件

1 个答案:

答案 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的复合控制方案。