2016-11-04 4 views
0

Я пытаюсь выделить когда-либо появление слова, соответствующего поисковому запросу. Но всегда выделяется только первое событие. Возможно ли, что метод SelectRange() может выделять только одно слово за раз? Если да, есть ли другой способ?Как выделить каждое происхождение слова в TextArea?

findButton.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { 
    @Override 
    public void handle(MouseEvent e) { 
     errorText.setText(""); 
     textArea.deselect(); 
     Matcher matcher; 
     Pattern findWord; 

     if (textField.getText() != null && !textField.getText().isEmpty() && upperLowerCaseMenuItem.isSelected()) { 
      findWord = Pattern.compile(textField.getText()); 
      matcher = findWord.matcher(textArea.getText()); 
     while (matcher.find()) { 
      textArea.selectRange(matcher.start(), matcher.end()); 
     } 
     }else { 
      errorText.setText("Missing search key"); 
     } 
    } 
}); 

ответ

0

Это невозможная задача с TextArea, поскольку этот контроль не может выбрать прерывистый текст. Если вы посмотрите на selectionProperty из TextArea:

public final ReadOnlyObjectProperty<IndexRange> selectionProperty 

он хранит только один IndexRange:

класса, представляющий собой непрерывный диапазон целых значений.

Вы можете использовать RichTextFX из Tomas Mikula который управления может быть использован для определения стиля нескольких диапазонов текста.