JTextArea как убрать пустую строку
Есть ли противоположный по действию символ \n (перевод строки)?
Мне нужно в JTextArea удалить выделенную строку, но после удаления этой строки следующая строка, которая выводится в JTextArea, идет как бы через одну строку. Т.е. по сути мне нужно добавить после каждого удаления строки "Backspace". Как это сделать?
Код для удаления строки:
delete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
t2.setText(t2.getText().replace(t2.getSelectedText(), ""));
}
});
Ответы (1 шт):
Проблема НЕ воспроизводится в том виде, как описана.
Чтобы удалить выделенную строку в JTextArea, нужно её выделить правильно.
Если текст выделяется до конца текущей строки (при помощи мышки или клавиш Shift+→ / Shift+End), при этом НЕ будет захвачен символ перевода строки \n, соответственно, он и не может быть удалён.
В этом легко убедиться, если залогировать состояние текста:
this.btnDelete.addActionListener(e -> {
String selected = txt.getSelectedText();
System.out.println("Selected: [" + selected + "], ends with \\n? " + selected.endsWith("\n"));
txt.setText(txt.getText().replace(selected, ""));
});
Selected: [bbb], ends with \n? false
Но если строка или несколько строк выделены с захватом символа '\n', например, при помощи Shift+↓, Shift+PageDown, они будут удалены корректно.
Selected: [
ccc
], ends with \n? true
РЕШЕНИЕ
Разумеется, можно исправить код, чтобы захватывать дополнительно ещё один символ при удалении, но это будет нестандартное поведение для пользователя.
Также для удаления текста следует использовать метод JTextComponent::replaceSelection, так как при использовании метода String::replace будут заменяться все подходящие строки, например, могут быть удалены все переводы строки '\n'.
this.btnDelete.addActionListener(e -> {
if (txt.getSelectionEnd() < txt.getText().length() && txt.getText().charAt(txt.getSelectionEnd()) == '\n') {
txt.setSelectionEnd(txt.getSelectionEnd() + 1);
}
String selected = txt.getSelectedText();
System.out.println("Selected: [" + selected + "], ends with \\n? " + selected.endsWith("\n"));
txt.replaceSelection("");
});
Selected: [wwww
], ends with \n? true
Selected: [
yyyy
], ends with \n? true
Selected: [xxxx], ends with \n? false



