2009-12-31 4 views
2

Я пытаюсь создать текстовый редактор с использованием Java Swing. В этом я использую JEditorPane вместо JTextArea. Я сталкиваюсь с проблемами при удалении выделенного текста и замене выделенного текста на JEditorPane. Код я использую:Удаление и замена выделенного текста в JEditorPane

public void delete(JEditorPane txt) 
{ 

    int start = txt.getSelectionStart(); 
    int end = txt.getSelectionEnd(); 
    String startText = txt.getText().substring(0,start); 
    String endText = txt.getText().substring(end,txt.getText().length()); 
    txt.setText(startText + endText); 
} 

Проблема я столкнулся в том, что, когда я считаю, что значение из getSelectionStart() и getSelectionEnd(), они не считают символ новой строки, но при использовании подстроки, рассматривается символ новой строки. Поэтому, если я использую этот код в строке, перед которой есть 5 символов новой строки, вместо удаления выбранного текста текст удаляется из позиции, которая на 5 меньше выделенного текста. То же самое происходит с Replace. Пожалуйста помоги.

+0

Я думаю, что они оба считают символы новой строки, но Windows, на самом деле использует два символа новой строки (возврат каретки + перевод строки), и что, кажется, вызывает путаницу здесь. –

ответ

11

Использование JEditorPane.getDocument().remove() и JEditorPane.getDocument().insertString()

+3

Определенно. Примечание: 'remove' берет' len' как второй параметр, поэтому вам придется использовать 'end-start'. –

+0

Спасибо, это сработало. – Logan

0

Вы можете использовать метод replaceSelection(), которая принимает строку, чтобы заменить выделенный текст. Вот его синтаксис. Если вы хотите удалить его, просто передайте пустую строку в качестве параметра.

jTextArea.replaceSelection(""); 
0
int l1,l2; 
l1=jTextArea1.getSelectionStart(); 
l2=jTextArea1.getSelectedText().length(); 
jTextArea1.getDocument().remove(l1, l2); 



//This Will Remove only the selected text. 
Смежные вопросы