Javafx TextArea 不可编辑的行

标签 java javafx textarea

我正在寻找一个简单的解决方案来使 TextArea 的第一行和最后一行不可编辑。 enter image description here

如图所示,我需要保留第一行和最后一行,用户可以在大括号中编辑或输入他想要的任何内容。 我实际上已经想出了这个简单的类,但是当用户设法在第二行上获取右大括号时,它有点中断,在第一行和最后一行之间不留下任何行,从而使用户无法编辑任何内容。

感谢您的所有回复。

public static class ScriptArea extends TextArea {
        @Override
        public void replaceText(int start, int end, String text) {
            String currentToStart = getText().substring(0, start);
            String startToEnd = getText().substring(start);
            if (currentToStart.contains("\n") && startToEnd.contains("\n")) {
                super.replaceText(start, end, text.equals("\n")?"\n\t":text);
            }
        }
    }

最佳答案

使用 TextFormatter使用过滤器否决任何不会使文本保持正确形式的更改:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
import javafx.stage.Stage;

public class TextAreaFixedStartEndLines extends Application {

    private final String start = "function collideWith(mobj, tar, dir) {\n";
    private final String end = "\n}";

    @Override
    public void start(Stage primaryStage) {
        TextArea textArea = new TextArea();
        textArea.setTextFormatter(new TextFormatter<String>((Change c) -> {
            String proposed = c.getControlNewText();
            if (proposed.startsWith(start) && proposed.endsWith(end)) {
                return  c;
            } else {
                return null ;
            }
        }));

        textArea.setText(start+"\n"+end);

        primaryStage.setScene(new Scene(textArea, 600, 600));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

关于Javafx TextArea 不可编辑的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36668951/

相关文章:

java - 如何在 Java 中使用 ComboBox 数据填充 ArrayList

javascript - 获取文本区域中距光标最近的某个字符

java - 无法使用 Guice 的方法 createInjector 找到符号

java - 为什么我的 BufferedImage 在绘制到 Canvas 时会有所不同?

java - 以我在 java 或 jquery 中输入文本区域的相同格式显示内容

html - 为什么 React 中的 &lt;textarea&gt; 接受 value 属性,但在 HTML 中却不接受?

java - Maven 编译器插件错误 : can't access enum (bad signature, bad class)

java - 获取一个知道其名称的按钮

java - 如何将键列表与实体关联

java - log4j2 未检测到自定义附加程序插件