2
저는 TextField
을 가지고 있으며, 대부분의 시스템에서 예상되는 동작 인 Esc을 누르면 해당 필드의 내용을 이전 값으로 복원하고 싶습니다. 왜 JavaFX 기본적으로이 작업을 수행하지 않습니다).JavaFX TextField cancelEdit가 예상대로 작동하지 않습니다.
이 목적으로 TextField.cancelEdit()
을 사용하려고 시도했지만 아무 것도하지 않는 것처럼 보입니다. 여기
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.stage.Stage;
public class UiTest2Controller extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage aPrimaryStage) throws Exception {
final TextField field = new TextField();
field.setOnAction(aEvent -> {
System.out.println("Action");
});
field.setOnKeyPressed(aEvent -> {
if (aEvent.getCode() == KeyCode.ESCAPE) {
System.out.println("Escape");
field.cancelEdit();
field.getParent().requestFocus();
}
});
field.setPromptText("Hello World...");
aPrimaryStage.setScene(new Scene(new Group(field)));
aPrimaryStage.show();
}
}
입니다 :
- 유형 뭔가를 텍스트 필드에
- 를 눌러 Esc를
예상되는 동작 : 필드가 이전 값으로 돌아가고 (처음 비어 있음) 초점이 손실됩니다.
실제 동작 : fiels는 해당 시점의 값을 유지하고 초점이 손실됩니다.
예, 난 그냥 자바 FX 소스에서 보면이를 발견했다. 너무 낮게 문서화되어 있습니다 ... 또한 텍스트 포맷터 세트로 Escape는 기본적으로 편집을 취소합니다. –
게다가 field.commitValue()를 호출하여 "복원 지점"을 만들 수 있습니다. 그렇지 않으면 항상 값을 빈 문자열로 롤백합니다. – DVarga
'TextFormatter'없이'field.commitValue()'를 호출해도 결과에 아무런 영향을 미치지 않습니다. 'TextFormatter'을 사용하면'commitValue'를 호출하지 않고도 예상대로 작동하므로 필요한지 확실하지 않습니다. – Itai