Как я могу получить строку строки из большого блока строки?

Я пытаюсь получить сегмент большой строки. Я пытался использовать indexOf(), но это полностью терпит неудачу, когда речь идет о повторяющемся тексте. Моя конечная цель состоит в том, чтобы пользователь мог выбирать текст в JTextPane и стилизовать только эту часть текста. У меня уже есть стили для работы с StyledDocuments, и я даже научился стилизовать только текст, который выбирает пользователь, но вот моя проблема.

Скажем так

String alltext = "Быстрая коричневая лиса перепрыгнула через ленивую собаку";

И то, что выделяет пользователь, это String selectedtext

В этом случае скажем так

Строка selectedtext = "коричневый";

Моя цель - получить смещение и длину выделенного текста. Для этого конкретного предложения я могу просто сделать:

int offset = alltext.indexOf(selectedtext);
int length = selectedtext.length();

И это будет работать нормально. А вдруг:

alltext = коричневый коричневый коричневый коричневый коричневый;

И пользователь выделяет третий коричневый цвет. Если я сделаю то же самое, что и раньше, программа просто выберет первый коричневый цвет вместо настоящего и применит стиль к первому.

Есть ли способ обойти это или альтернативу получению позиции сегмента String из большого блока?

Спасибо!


person applemavs    schedule 07.04.2013    source источник
comment
есть несколько вопросов о том, что я думаю, что два ответа в соответствующих разделах (под значком Карьера 2.0)   -  person mKorbel    schedule 08.04.2013
comment
Почему вы отслеживаете выделение как строку, а не напрямую как индекс/смещение, как это обычно делается? JTextPane должен делать это автоматически. Или, говоря по-другому: если по какой-то причине вы можете только определить, какую строку ищет пользователь, нет никакого способа узнать, какая именно.   -  person millimoose    schedule 08.04.2013
comment
Как именно вы получаете значение индекса из JTextPane? Есть ли метод, который делает это для вас?   -  person applemavs    schedule 08.04.2013
comment
Спасибо, getSelectionStart(), похоже, помог.   -  person applemavs    schedule 08.04.2013


Ответы (2)


Это проблема пользовательского интерфейса, а не проблема java.lang.String.

Если вы разместите свой код пользовательского интерфейса, мы можем хорошо ответить.

В Swing могут помочь TextComponent и базовая модель, предоставляя вам start и end индексы текущего выбора.

person Aubin    schedule 07.04.2013

Не уверен, что правильно понимаю ваш вопрос. Если вы говорите, что хотите определить, когда пользователь выбрал текст, а затем стилизовать этот текст:

Чтобы кто-то мог выделить текст, он должен щелкнуть текстовую область, перетащить и отпустить щелчок. Итак, подключите MouseListener и реализуйте метод mouseReleased, чтобы проверить, был ли выделен какой-либо текст, и если да, то сохранить его как строку:

public void mouseReleased(MouseEvent e) {
    if (textArea.getSelectedText != null){ //see if they selected something 
        String s = textArea.getSelectedText();
        //stylize s
        }

РЕДАКТИРОВАТЬ: Если вы собираетесь использовать кнопку, то это еще проще. Добавьте ActionListener к кнопке и

     public void ActionPerformed(ActionEvent e) {
    if (textArea.getSelectedText() != null){ //see if they selected something 
        Font f = showStyleOptionsMenu();
        textArea.getSelectedText().setFont(f);
        }

showStyleOptionsMenu() отображает новую панель (или диалоговое окно или что-то еще), которое позволяет пользователю выбрать стиль шрифта, а затем возвращает выбранный шрифт слушателю, который применяет его к выделенному тексту.

person drew moore    schedule 07.04.2013
comment
пожалуйста, modelToView/viewToModel (Document/AbstractDocument) - person mKorbel; 08.04.2013
comment
@mKorbel Я не уверен, что ты говоришь - person drew moore; 08.04.2013
comment
Или вы можете просто использовать CaretListener вместо взлома с помощью событий мыши - person millimoose; 08.04.2013
comment
Как я могу стилизовать s в методе mouseReleased, когда пользователь должен нажать JButton в отдельном классе, чтобы определить стиль? - person applemavs; 08.04.2013
comment
@millimoose согласился для JTextArea без html, специальных и пробельных символов, например. ... - person mKorbel; 08.04.2013