以下代码应该在JavaFX TextField
中选择一个单词:
public class NewFXMain extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
final TextInputControl textField = new TextField("Hello World, World!");
Button button = new Button("select");
button.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent t) {
textField.positionCaret(0);
textField.selectNextWord();
System.out.println(textField.getSelectedText());
}
});
VBox root = new VBox();
root.getChildren().add(textField);
root.getChildren().add(button);
primaryStage.setScene(new Scene(root, 300, 100));
primaryStage.show();
}
}
它在控制台中打印Hello
,但在界面中没有选择任何内容(突出显示)。
如果对TextArea
执行相同操作,则会正确选择文本。
TextField
:
TextArea
:
发生了什么事???
答案 0 :(得分:5)
TextField
除非有焦点,否则不显示选择(虽然我不确定它是错误还是功能)。您可以使用下一个代码查看选择:
button.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent t) {
textField.requestFocus(); // get focus first
textField.positionCaret(0);
textField.selectNextWord();
System.out.println(textField.getSelectedText());
}
});
答案 1 :(得分:1)
问题的答案是,我们对这方面的原生控制的理解是,当文本字段失去焦点时它们都清晰选择,并且它们(通常)在获得焦点时选择所有文本。我们在JavaFX中使用UI控件的意图是具有原生感觉但是具有自定义外观。当然,我们可以根据其工作方式改变主意,但必须与保持原生感觉的目标相平衡(其中包括选择所有焦点,而不显示焦点丢失的选择,即使选择存在。但是,由于没有任何选择焦点丢失,如果它只是选择 - 所有焦点获得,因为奇怪的边缘情况仍然存在因此,我们不得不怀疑是否值得改变这一点)。