如何禁用 TextArea (JavaFX) 中的文本选择?
How to disable text selection in TextArea (JavaFX)?
我想禁用用户在 JavaFX 的 textArea 中 select 文本的能力。如何做到这一点?
这可能有点违反直觉,但方法是使用 TextFormatter
。传递给文本格式化程序的 Change
包括当前插入符号位置和锚点位置(并且对其中任何一个的任何更改都会导致更改被转发到文本格式化程序,并可能被文本格式化程序否决或修改)。通过设置锚点使其与插入符位置相同,确保未选择任何内容:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class DisableTextSelection extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
TextArea textArea = new TextArea();
textArea.setTextFormatter(new TextFormatter<String>(change -> {
change.setAnchor(change.getCaretPosition());
return change ;
}));
BorderPane root = new BorderPane(textArea);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
我想禁用用户在 JavaFX 的 textArea 中 select 文本的能力。如何做到这一点?
这可能有点违反直觉,但方法是使用 TextFormatter
。传递给文本格式化程序的 Change
包括当前插入符号位置和锚点位置(并且对其中任何一个的任何更改都会导致更改被转发到文本格式化程序,并可能被文本格式化程序否决或修改)。通过设置锚点使其与插入符位置相同,确保未选择任何内容:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class DisableTextSelection extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
TextArea textArea = new TextArea();
textArea.setTextFormatter(new TextFormatter<String>(change -> {
change.setAnchor(change.getCaretPosition());
return change ;
}));
BorderPane root = new BorderPane(textArea);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}