2013-04-07 3 views
1

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

Допустим, что

Строка alltext = «быстрая коричневая лиса перепрыгнула через ленивую собаку»;

А какие моменты пользователь является String selectedtext

В этом случае, давайте просто скажем,

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

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

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

И это будет нормально работать. Но что, если:

alltext = brownbrownbrownbrownbrown;

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

Есть ли способ обойти это или нет, чтобы получить положение сегмента строки из большого блока?

Спасибо!

+0

Есть несколько вопросов, о которых я думаю, что два ответа в связанных (под значком Careers 2.0) – mKorbel

+0

Почему вы отслеживаете выбор как строку, а не напрямую как индекс/смещение, как это обычно делается? JTextPane должен делать это автоматически. Или, если сказать по-другому: если по какой-то причине вы можете определить только ту строку, которую пользователь ищет, нет способа узнать, какой она есть. – millimoose

+0

Как именно вы получаете значение индекса из JTextPane? Есть ли способ, который делает это для вас? – applemavs

ответ

0

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

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

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

EDIT: Если вы собираетесь использовать кнопку, то его даже Полегче. Добавить ActionListener на кнопку и

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

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

+0

please modelToView/viewToModel (Document/AbstractDocument) – mKorbel

+0

@mKorbel Я не уверен, что вы говорите – drewmoore

+0

Или вы могли бы просто использовать ['CaretListener'] (http://docs.oracle.com/javase/7/ docs/api/javax/swing/text/JTextComponent.html # addCaretListener (javax.swing.event.CaretListener)) вместо того, чтобы взломать это с помощью событий мыши – millimoose

1

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

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

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

Смежные вопросы