我从Document
获取JTextPane
个对象,其中包含方法remove
,但具有特定数量的字符textPane.getDocument().remove(begin,end)
。我想删除整个第一行。
答案 0 :(得分:6)
见Limit Lines in Document。该类中的代码将向您展示如何获取行中字符的开始/结束偏移量。
或者您可以使用Utilities类。
getRowStart(...)
getRowEnd(...);
一旦知道了开始/结束,就可以使用remove()方法。
答案 1 :(得分:6)
下面显示了如果您正在考虑“以换行符结尾的内容”的行,如何删除JTextPane的第一行(Element)。如果您的文档中有更高级的内容,则可能需要做一些更精细的内容
JTextPane pane = new JTextPane();
pane.setText("I've got to go\nI can stay, though.\nThree lines of text?");
System.out.println(pane.getText());
System.out.println("\n\n\n removing! \n\n\n");
Element root = pane.getDocument().getDefaultRootElement();
Element first = root.getElement(0);
pane.getDocument().remove(first.getStartOffset(), first.getEndOffset());
System.out.println(pane.getText());
答案 2 :(得分:2)
如何创建第一行的字符串?如果代码告诉JTextPane要写的字符串是基于现有的String变量,如下面的
private String myString = "Hello, this is the first line!";
private JTextPane myPane = new JTextPane(...);
...
public void writeFirstLine(){
myPane.setText(myString);
}
然后您可以执行以下操作:
textPane.getDocument().remove(0, myString.length()); //this is assuming the remove function
//excludes the end index and removes everything up to it. Otherwise, it would be
//myString.length()-1
如果您没有如上所述预先定义的第一行,并且您基本上只想删除第一个句点或其他特殊字符,则可以使用StreamTokenizer来查找目标分隔字符(这可以是EOL设置为有效的行[EOL]的结尾。您可以在streamtokenizer中将空格设置为有效,并在遇到字符计数器变量时立即添加它们。然后您基本上将每个标记转换为字符串在允许streamtokenizer继续前进并获取每个令牌的字符长度之前,在最初为null的String对象(您为每个令牌重复使用)内部,将其添加到字符计数器变量,然后再转到下一个令牌。当分隔符标点时到达字符,再次为最后一个标记运行加法运算,然后你的字符计数器变量将具有直到第一行末尾的字符数。在这种情况下,代码将是:
textPane.getDocument().remove(0,charCounter) //this is assuming the remove function
//excludes the end index and removes everything up to it. Otherwise, it would be charCounter-1
希望这会有所帮助
CCJ