JTextPane удаляет первую строку - PullRequest
3 голосов
/ 02 августа 2011

Я получаю Document объект из JTextPane, который содержит метод remove, но определенное количество символов textPane.getDocument().remove(begin,end). Я хотел бы удалить всю первую строку.

Ответы [ 3 ]

6 голосов
/ 02 августа 2011

Ниже показано, как удалить первую строку (элемент) JTextPane, если вы рассматриваете строки «вещи, заканчивающиеся символом новой строки». Если у вас есть более содержательный контент в вашем Документе, вам может потребоваться сделать что-то более сложное

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());
6 голосов
/ 02 августа 2011

См. Ограничение строк в документе .Код в этом классе покажет вам, как получить начальное / конечное смещение символов в строке.

Или вы можете использовать класс Utilities.

getRowStart(...)
getRowEnd(...);

Когда вы знаете начало / конец, вы можете использовать метод remove ().

2 голосов
/ 02 августа 2011

Как вы создаете строку, которая идет в первой строке? Если код, сообщающий JTextPane, какую строку записать, основан на существующей строковой переменной, как показано ниже

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 и добавить их, как только они встретятся, в переменную счетчика символов. Тогда вы по существу приведете каждый токен чтобы вставить строку в изначально нулевой объект String (который вы повторно используете для каждого токена), прежде чем позволить streamtokenizer двигаться дальше и получить длину символа каждого, добавив его в переменную счетчика символов, прежде чем переходить к следующему токену. Достигнут символ пунктуации разделителя, запустите операцию сложения еще раз для последнего токена, и тогда ваша переменная счетчика символов будет иметь количество символов до конца первой строки. В этом случае код будет:

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

...