2010-07-06 3 views
0

Я пишу текстовый редактор (в java), где я использую JTextArea для основного редактирования текста, и я помещаю текст в строковый конструктор.Получение первого и последнего значения индекса выделенного текста в JTextArea

Когда я выделяю текст и делаю что-то вроде удаления этого блока текста, я хочу, чтобы он обновлялся в stringbuilder.

Итак, мой вопрос в том, есть ли способ получить первый и последний индекс выделенного текста в построителе строк?

Спасибо.

ответ

1

Вы можете сохранить их в синхронизации, используя DocumentListener, как показано ниже. Тем не менее, я настоятельно рекомендую пересмотреть любой подход, который вы пытаетесь сделать здесь. Похоже, вы пытаетесь использовать внешний StringBuilder как «модель» для вашего JTextArea, но Document - это модель. Поэтому я не вижу, когда это будет хорошей идеей.

public static void main(String[] args) { 
    JTextArea area = new JTextArea(); 
    final StringBuilder builder = new StringBuilder(); 
    area.getDocument().addDocumentListener(new DocumentListener() { 
     @Override 
     public void removeUpdate(DocumentEvent e) { 
      builder.delete(e.getOffset(), e.getOffset() + e.getLength()); 
      System.out.println("Removed " + e.getLength() + " chars from SB"); 
     } 

     @Override 
     public void insertUpdate(DocumentEvent e) { 
      try { 
       builder.insert(e.getOffset(), 
         e.getDocument().getText(e.getOffset(), e.getLength())); 
       System.out.println("Inserted " + e.getLength() + " chars into SB."); 
      } catch (BadLocationException ble) { 
       ble.printStackTrace(); 
      } 
     } 

     @Override public void changedUpdate(DocumentEvent e) { /* no-op */ } 
    }); 

    final JFrame frame = new JFrame("DocumentListener Test"); 
    frame.add(area); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent e) { 
      System.out.println("Final SB contents:"); 
      System.out.println(builder.toString()); 
     } 
    }); 
    frame.pack(); frame.setVisible(true); 
} 
+0

Большое спасибо за ответ и совет. Пора мне читать о DocumentListener. –

1

Если вы удалите текст в JTextArea, не можете ли вы просто позвонить getText(); на свой JTextArea, чтобы получить обновленный текст?

Я предполагаю, что (в вашем построителе строк) вы сохраняете запись строки, которая не была удалена. Если вы хотите сохранить запись о том, что удаляется, вы можете сравнить то, что было в JTextArea изначально, обновленному, чтобы узнать, что было удалено. Вы можете сделать это, узнав, по какому индексу оригинальная и обновленная версии отличаются и где они совпадают.

+0

Благодарим за ответ. –

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