Вы можете непосредственно сделать TextField
вести себя так, как будто клавиша Backspace была нажата, вызвав 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);
}
}
Почему просто не делать [ 'target.deletePreviousChar()'] (http://docs.oracle.com/javase/8/javafx/api/javafx/ сцена/контроль/TextInputControl.html # deletePreviousChar--)? –
Спасибо @James_D, но мне нужно знать, что есть удобный способ использовать Backspace в KeyEvent ?? – Hiran
Зачем вам это нужно? –