如何禁用 TextArea (JavaFX) 中的文本选择?

Posted

技术标签:

【中文标题】如何禁用 TextArea (JavaFX) 中的文本选择?【英文标题】:How to disable text selection in TextArea (JavaFX)? 【发布时间】:2020-08-23 04:36:57 【问题描述】:

我想禁用用户在 JavaFX 的 textArea 中选择文本的功能。如何做到这一点?

【问题讨论】:

【参考方案1】:

这可能有点违反直觉,但这样做的方法是使用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);
    


【讨论】:

谢谢。这会禁用文本选择突出显示,但是当我将鼠标移到光标上时,光标仍然看起来像文本选择光标。有没有办法安排呢? @chaim770 我认为您可以使用 CSS 更改光标,就像任何其他控件一样,或者只是做textArea.setCursor(Cursor.DEFAULT); 使用 CSS:你必须将光标设置在文本区域的内容上,即.text-area .content -fx-cursor: default ; 。不过,我可能不建议将其作为良好的用户体验,因为文本光标会提示用户可以在文本区域中键入,而不是提示他们可以选择文本。

以上是关于如何禁用 TextArea (JavaFX) 中的文本选择?的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX - 如何从TextArea隐藏滚动条?

JavaFX:如何滚动到textarea中的特定行

JavaFX TextArea 中的 Tab 键导航

“textarea”中的 JavaFX 8 计数行

如何知道用户在 JavaFX TextArea 中选择了哪个文本字符串

如何在 setText 之后滚动 JavaFX TextArea