javafx-8 - JavaFX8 KeyEvent - 触发文本字段上的退格键

标签 javafx-8 keyevent backspace

我正在尝试在基于触摸的系统的虚拟键盘上触发退格键。这是我到目前为止尝试过的代码。

Button source = new Button("Backspace");
TextField target = new TextField();
KeyEvent ke = new KeyEvent(source, target, KeyEvent.KEY_TYPED, "", "", KeyCode.BACK_SPACE, false, false, false, false);
target.fireEvent(ke);

此代码不返回任何内容...

最佳答案

可以直接制作TextField表现得就像通过调用 target.deletePreviousChar() 按下了退格键一样,这可能是一个更好的方法。

要模拟实际按下 Backspace 键,您需要进行以下更改:

  • 文本字段响应 KEY_PRESSED事件,而不是KEY_TYPED事件。最好生成键入按键时发生的整个事件序列: KEY_PRESSED , KEY_TYPED ,和KEY_RELEASED .
  • 文本字段必须具有焦点。您可以使用 source.setFocusTraversable(false) 阻止按钮获得焦点.
  • KeyCode对于 KEY_TYPED事件应该是UNDEFINED (参见文档)。

这是 SSCCE:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TriggerBackspaceOnTextField extends Application {

    @Override
    public void start(Stage primaryStage) {
        TextField textField = new TextField();
        Button backspace = new Button("Backspace");
        backspace.setFocusTraversable(false);
        backspace.setOnAction(e -> {
            KeyEvent press = new KeyEvent(backspace, textField, KeyEvent.KEY_PRESSED, "", "", KeyCode.BACK_SPACE, false, false, false, false);
            textField.fireEvent(press);
            KeyEvent typed = new KeyEvent(backspace, textField, KeyEvent.KEY_TYPED, "", "", KeyCode.UNDEFINED, false, false, false, false);
            textField.fireEvent(typed);
            KeyEvent release = new KeyEvent(backspace, textField, KeyEvent.KEY_RELEASED, "", "", KeyCode.BACK_SPACE, false, false, false, false);
            textField.fireEvent(release);
        });

        VBox root = new VBox(10, textField, backspace);
        root.setAlignment(Pos.CENTER);
        Scene scene = new Scene(root, 350, 200);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

关于javafx-8 - JavaFX8 KeyEvent - 触发文本字段上的退格键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33258933/

相关文章:

javascript - 禁用退格键

c - 我代码中的\b 不会使光标返回

ios - 如何在 UITextView 中获取已删除的文本?

css - JavaFX ListCell 选择的颜色

java - 焦点 JavaFX FXML 上的 KeyEvent

css - 如何只为一个元素保留CSS样式

keyevent - 什么时候应该使用 keydown 和 keyup?

javascript - 如何在 UI5 中对 F5 按键执行自己的操作?

javascript - 操作系统独立的键盘事件到字符映射

image - 关于带有小图标的 TextField