如何从JTextArea中逐个删除行

时间:2014-03-29 04:10:50

标签: java jtextarea

如何逐个删除JTextArea中的行而不是一起删除行?

我有一个JTextArea,它从一个线程附加了字符串结果,现在我想在线程执行时一次删除一行。

2 个答案:

答案 0 :(得分:2)

  • 您首先需要决定触发线路移除的内容。
  • 是否应添加新行,以使总行数保持不变。如果是这样,那么您应该编写代码以在添加新行的位置调用行删除代码。
  • 或者它应该是恒定的速率 - 如果是这样,那么你将需要使用Swing Timer。
  • 然后您需要决定要删除哪一行。如果不是第一行,那么你需要弄清楚如何计算哪一行。 javax.swing.text.Utilities类可以帮助您找到JTextArea中每行文本的开始和结束位置。

修改
你问:

  

主要关注的是如何从JTextArea中删除它,我已经计算了必须删除的行的开始和结束位置。但是什么函数可以帮助删除那一行?

  • 您首先通过调用getDocument()
  • 获取JTextArea的文档
  • 然后,您可以按照Document API
  • 在文档上调用remove(int offs, int length)

答案 1 :(得分:0)

试试这个:

  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;

class SwingControlDemo {
String [] m; 
int i=0;
String append="";
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
Timer   t;

public SwingControlDemo(){
  prepareGUI();
}

public static void main(String[] args){
  SwingControlDemo  swingControlDemo = new SwingControlDemo();      
  swingControlDemo.showTextAreaDemo();
}

private void prepareGUI(){
  mainFrame = new JFrame("Java Swing Examples");
  mainFrame.setSize(400,400);
  mainFrame.setLayout(new GridLayout(3, 1));
  mainFrame.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent windowEvent){
        System.exit(0);
     }        
  });    
  headerLabel = new JLabel("", JLabel.CENTER);        
  statusLabel = new JLabel("",JLabel.CENTER);    

  statusLabel.setSize(350,100);

  controlPanel = new JPanel();
  controlPanel.setLayout(new FlowLayout());

  mainFrame.add(headerLabel);
  mainFrame.add(controlPanel);
  mainFrame.add(statusLabel);
  mainFrame.setVisible(true);  
 }

private void showTextAreaDemo(){
  headerLabel.setText("Control in action: JTextArea"); 

  JLabel  commentlabel= new JLabel("Comments: ", JLabel.RIGHT);

  final JTextArea commentTextArea = 
     new JTextArea("This is a Swing tutorial "
     +"\n to make GUI application in Java."+"\n to make GUI application in Java"+"\n to make GUI application in Java",5,20);

  JScrollPane scrollPane = new JScrollPane(commentTextArea);    

  JButton showButton = new JButton("Show");

  showButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {     
     String s=commentTextArea.getText(); 
         m=s.split("\n");
        t.start();

     }
  }); 

 t=new Timer(1000,new ActionListener(){
     public void actionPerformed(ActionEvent e)
    {
    i++;
     append="";
    if(i<=m.length)
    {
     for(int j=i;j<m.length;j++)
     {
      append=append+m[j];
     }  
     commentTextArea.setText(append);

    }

    else
    {
    t.stop();   
    }
      }});
  controlPanel.add(commentlabel);
  controlPanel.add(scrollPane);        
  controlPanel.add(showButton);
  mainFrame.setVisible(true);  
     }
 }