JTextField и \ r \ n проблемы - PullRequest
       10

JTextField и \ r \ n проблемы

1 голос
/ 02 ноября 2009

Часть приложения, над которым я работаю, включает в себя средство просмотра файлов журнала с функцией поиска текста, которая вызывает сопоставление с шаблоном на JTextField#getText(), например:

Matcher m = somePattern.matcher(textField.getText());
m.find(startPosn);
System.out.println("startPosn: " + m.start());
System.out.println("endPosn: " + m.end());

, где textField является JTextField, а
startPosn устанавливается в текущую позицию каретки текстового поля

Однако начальная и конечная позиции, возвращаемые этим возвратом неверные начальная и конечная позиции каретки, только в Windows .
Начальная и конечная позиции на X больше, чем должны быть, где X = количество раз, когда новая строка встречается в textField до startPosn.

Поскольку в Linux этого нет, я думаю, что это может быть связано с различием в способе обработки новых строк (\r\n и \n).

Я что-то не так делаю; и как мне работать с этим?

Impl. Решение:

Изменено с использованием примера в TFA, связанном с помощью camickr.

Matcher m = somePattern.matcher(textField.getDocument().getText(0, textField.getDocument().getLength()));
m.find(startPosn);
System.out.println("startPosn: " + m.start());
System.out.println("endPosn: " + m.end());

Примечание: изменилась только первая строка.

Это позволило мне получить правильный вывод как в Linux, так и в Windows.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2009

Я думаю, что это может быть связано с разница в том, каким образом новый строки (\ r \ n и \ n) обрабатываются.

Да, это проблема в Windows.

Но я сомневаюсь, что у вас возникнут проблемы с JTextField, поскольку они не содержат строк новых строк.

Я предлагаю вам прочитать Текст и новые строки , которые объяснят, как справиться с этим для JTextArea и JTextPane.

Если вам нужна дополнительная помощь, отправьте сообщение SSCCE , в котором указана проблема.

1 голос
/ 02 ноября 2009

Вы можете использовать что-то вроде этого:

String text = textField.getText();
text.replaceAll(System.getProperty("line.separator"), "\n");

Тогда делай свое дело. В приведенном выше коде вы можете заменить «\ n» на то, что вам нужно.

...