2016-01-12 2 views
2

Для моего случая, я хочу вставить текст внутри JTextArea по номеру строки.java - вставка текста с использованием JTextArea по номеру строки

Для

например
name : andy 
birth : jakarta, 1 jan 1990 
number id : 01011990 01 
age : 26 
study : Informatics engineering 

Итак, я хочу, чтобы вставить текст в последней позиции в строке 3.

Я думаю, что я могу использовать: jTextArea.getDocument.insertString(3," my text here".null);
, но он не работает.

Итак, я хочу, чтобы мой результат был таким.

name : andy 
birth : jakarta, 1 jan 1990 
number id : 01011990 01 my text here 
age : 26 
study : Informatics engineering 
+0

При использовании 'метод jTextArea.getDocument.insertString' вы получаете ошибку или просто текст не был включен? –

+0

так, что я должен делать? – newbie

+1

Вам нужно рассчитать позицию в документе, которая будет представлять строку 3, [это] (https://tips4java.wordpress.com/2009/05/23/text-component-line-number/) может дать вам некоторые идеи – MadProgrammer

ответ

4

Вы можете использовать Element#getElement(int) метод:

import java.awt.*; 
import java.awt.event.*; 
import java.util.Optional; 
import javax.swing.*; 
import javax.swing.text.*; 

public class ElementEndOffsetTest { 
    public JComponent makeUI() { 
    String str = "name : andy\n" 
       + "birth : jakarta, 1 jan 1990\n" 
       + "number id : 01011990 01\n" 
       + "age : 26\n" 
       + "study : Informatics engineering\n"; 

    JTextArea textArea = new JTextArea(str); 
    textArea.setEditable(false); 
    JPanel p = new JPanel(new BorderLayout()); 
    p.add(new JScrollPane(textArea)); 
    p.add(new JButton(new AbstractAction("add") { 
     @Override public void actionPerformed(ActionEvent e) { 
     Document doc = textArea.getDocument(); 
     Element root = doc.getDefaultRootElement(); 
     Optional.ofNullable(root.getElement(2)).ifPresent(el -> { 
      try { 
      doc.insertString(el.getEndOffset() - 1, " my text here", null); 
      } catch (BadLocationException ex) { 
      ex.printStackTrace(); 
      } 
     }); 
     } 
    }), BorderLayout.SOUTH); 
    return p; 
    } 
    public static void main(String[] args) { 
    EventQueue.invokeLater(() -> { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     f.getContentPane().add(new ElementEndOffsetTest().makeUI()); 
     f.setSize(320, 240); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    }); 
    } 
} 
Смежные вопросы