Java 如何从JTextArea中逐个删除行

Java 如何从JTextArea中逐个删除行,java,jtextarea,Java,Jtextarea,如何从JTextArea中逐个而不是全部删除行 我有一个JTextArea,它附加了一个线程的字符串结果,现在我想在线程执行时一次删除一行 您首先需要决定什么应该触发行删除 应该是增加一个新行,使总行数保持不变。如果是这样,那么您应该编写代码,在添加新行的同一位置调用行删除代码 或者它应该是一个恒定的速率——如果是这样的话,那么您需要使用一个摆动计时器来实现这一点 然后您需要决定删除哪一行。如果不是第一行,那么您需要弄清楚如何计算哪一行。javax.swing.text.Utilities类可

如何从JTextArea中逐个而不是全部删除行

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

  • 您首先需要决定什么应该触发行删除
  • 应该是增加一个新行,使总行数保持不变。如果是这样,那么您应该编写代码,在添加新行的同一位置调用行删除代码
  • 或者它应该是一个恒定的速率——如果是这样的话,那么您需要使用一个摆动计时器来实现这一点
  • 然后您需要决定删除哪一行。如果不是第一行,那么您需要弄清楚如何计算哪一行。
    javax.swing.text.Utilities类可以帮助您找到JTextArea中每行文本的开始和结束位置

编辑
你问:


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

  • 首先通过调用,
    getDocument()
  • 然后您可以根据调用文档上的
    remove(int offs,int length)
试试这个:

  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);  
     }
 }
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
类SwingControlDemo{
字符串[]m;
int i=0;
字符串append=“”;
专用JFrame主机;
私人JLabel headerLabel;
专用JLabel状态标签;
专用JPanel控制面板;
定时器t;
公共SwingControlDemo(){
prepareGUI();
}
公共静态void main(字符串[]args){
SwingControlDemo SwingControlDemo=新的SwingControlDemo();
swingControlDemo.showTextAreaDemo();
}
私有void prepareGUI(){
mainFrame=新JFrame(“Java Swing示例”);
大型机。设置大小(400400);
大型机.setLayout(新的GridLayout(3,1));
mainFrame.addWindowListener(新的WindowAdapter(){
公共作废窗口关闭(WindowEvent WindowEvent){
系统出口(0);
}        
});    
headerLabel=新的JLabel(“,JLabel.CENTER”);
statusLabel=新的JLabel(“,JLabel.CENTER”);
statusLabel.setSize(350100);
控制面板=新的JPanel();
setLayout(新的FlowLayout());
mainFrame.add(headerLabel);
添加(控制面板);
mainFrame.add(状态标签);
mainFrame.setVisible(true);
}
私有void showTextAreaDemo(){
headerLabel.setText(“正在运行的控件:JTextArea”);
JLabel commentlabel=新的JLabel(“注释:”,JLabel.RIGHT);
最终JTextArea commentTextArea=
新的JTextArea(“这是一个Swing教程”
+“\n用Java制作GUI应用程序。”+“\n用Java制作GUI应用程序”+“\n用Java制作GUI应用程序”,5,20);
JScrollPane scrollPane=新的JScrollPane(commentTextArea);
JButton showButton=新JButton(“Show”);
showButton.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
字符串s=commentTextArea.getText();
m=s.split(“\n”);
t、 start();
}
}); 
t=新计时器(1000,新ActionListener(){
已执行的公共无效操作(操作事件e)
{
i++;
附加“”;

如果(i)实现一个查找第一个“\n”的方法,从那一点开始获取其余内容清除文本区域并附加刚刚获得的文本。主要关注的是如何将其从JTextArea中删除,我已经计算了必须删除的行的开始和结束位置。但是什么函数可以帮助仅删除这一行?非常感谢,我可以看到它在一个te上被删除现在我将尝试使用计时器和正确的GUI。再次感谢。