JavaFXTextArea不可编辑的行
我正在寻找一个简单的解决方案,使第一行和最后一行的TextArea不可编辑 如图所示,我需要保留第一行和最后一行,用户可以在花括号中编辑或输入他想要的任何内容。 实际上,我已经提出了这个简单的类,但是当用户设法在第二行上获得结束的花括号时,它有点中断,在第一行和最后一行之间没有留下任何行,使得用户无法编辑任何内容 谢谢大家的回复JavaFXTextArea不可编辑的行,java,javafx,textarea,Java,Javafx,Textarea,我正在寻找一个简单的解决方案,使第一行和最后一行的TextArea不可编辑 如图所示,我需要保留第一行和最后一行,用户可以在花括号中编辑或输入他想要的任何内容。 实际上,我已经提出了这个简单的类,但是当用户设法在第二行上获得结束的花括号时,它有点中断,在第一行和最后一行之间没有留下任何行,使得用户无法编辑任何内容 谢谢大家的回复 public static class ScriptArea extends TextArea { @Override public v
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);
}
}
}
使用一个过滤器,该过滤器将否决任何未以正确形式保留文本的更改:
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.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.TextArea;
导入javafx.scene.control.TextFormatter;
导入javafx.scene.control.TextFormatter.Change;
导入javafx.stage.stage;
公共类TextAreaFixedStartEndLines扩展应用程序{
private final String start=“函数冲突(mobj,tar,dir){\n”;
私有最终字符串end=“\n}”;
@凌驾
公共无效开始(阶段primaryStage){
TextArea TextArea=新建TextArea();
setTextFormatter(新的TextFormatter((更改c)->{
提议的字符串=c.getControlNewText();
if(提议的开始和提议的结束){
返回c;
}否则{
返回null;
}
}));
textArea.setText(开始+“\n”+结束);
设置场景(新场景(textArea,600600));
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
使用一个过滤器,该过滤器将否决任何未以正确形式保留文本的更改:
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.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.TextArea;
导入javafx.scene.control.TextFormatter;
导入javafx.scene.control.TextFormatter.Change;
导入javafx.stage.stage;
公共类TextAreaFixedStartEndLines扩展应用程序{
private final String start=“函数冲突(mobj,tar,dir){\n”;
私有最终字符串end=“\n}”;
@凌驾
公共无效开始(阶段primaryStage){
TextArea TextArea=新建TextArea();
setTextFormatter(新的TextFormatter((更改c)->{
提议的字符串=c.getControlNewText();
if(提议的开始和提议的结束){
返回c;
}否则{
返回null;
}
}));
textArea.setText(开始+“\n”+结束);
设置场景(新场景(textArea,600600));
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
TextFlow
可能有用。检查此TextFlow
是否可用。检查这看起来很神奇,尝试实现它。“开始”这句话并不总是一样的,请耐心听我说:)好的,看起来很棒。非常感谢:)看起来很棒,正在尝试实现它。“开始”这句话并不总是一样的,请耐心听我说:)好的,看起来很棒。非常感谢:)