删除 JavaFx 文本区域的第一行
Posted
技术标签:
【中文标题】删除 JavaFx 文本区域的第一行【英文标题】:Delete first Line of a JavaFx Textarea 【发布时间】:2016-10-22 15:42:06 【问题描述】:您好,我想。 我在我的 Textarea 上设置了一个 TextFormatter,我想删除第一行,当其中有超过 20 行时:
private <T> TextFormatter<T> createTextFormatter()
final IntegerProperty lines = new SimpleIntegerProperty(1);
return new TextFormatter<>(change ->
if (change.isAdded())
if (change.getText().indexOf('\n') > -1)
lines.set(lines.get() + 1);
if (lines.get() > 20)
//TODO
//delete first row
return change;
);
如果有人能帮忙,我会很高兴
谢谢
【问题讨论】:
【参考方案1】:覆盖 TextArea 的 replaceText 方法并检查行数,而不是删除超过 20 行的第一行似乎有效,
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class FixedLineCountTextAreaTry extends Application
public static void main(String[] args)
launch(args);
@Override
public void start(Stage primaryStage)
primaryStage.setTitle("Try to enter me more than 20 lines...");
TextArea ta = new TextArea()
@Override
public void replaceText(int start, int end, String text)
super.replaceText(start, end, text);
while(getText().split("\n", -1).length > 20)
int fle = getText().indexOf("\n");
super.replaceText(0, fle+1, "");
positionCaret(getText().length());
;
StackPane root = new StackPane();
root.getChildren().add(ta);
primaryStage.setScene(new Scene(root, 300, 500));
primaryStage.show();
【讨论】:
如果复制多行文本并粘贴到文本区域,则不起作用...您可能需要在开头删除多行。【参考方案2】:如果 u 表示新行是 \n,则此代码可以正常工作。
String array[] = textArea.getText().split("\n");
String textToSet = "";
for(int i=1; i<array.length; i++)
textToSet+=array[i] + "\n";
textArea.setText(textToSet);
【讨论】:
【参考方案3】:试试这个基于文本格式化程序的解决方案。
TextFormatter<String> change ->
if (change.isAdded)
val maxByteSize = 1.5e+6 //15 mb
if (change.controlNewText.length <= maxByteSize) change
else
val textArea = change.control as TextArea
val end = if (textArea.length > change.text.length) change.text.length else textArea.length
textArea.replaceText(0, end, "")
change.setRange(textArea.length, textArea.length)
change
else
change
【讨论】:
截取的是 Kotlin 语法:P hmm ...来自api doc of textFormatter:“请注意,您永远不应该直接从格式化程序处理程序中修改控件的状态”...您可以通过替换底层 textArea 中的文本来实现(还是我误读了 kotlin?)以上是关于删除 JavaFx 文本区域的第一行的主要内容,如果未能解决你的问题,请参考以下文章