如何阻止jTable一次性添加所有内容?

时间:2016-05-25 18:02:03

标签: java swing jtable

基本上我有一种方法可以从文本文件中读取并向jTable添加行。这已经得到了解决,一切正常。我想要的是添加行效果。我希望jTable一次一行地添加,而不是一次添加所有行。 我使用java.swing.Timer找到了类似的解决方案,但它对我不起作用。

下面我有一个从文本文件中读取的方法,添加到jTable和Timer以暂停每行的插入行进程(我的预期目的)。 Timer工作正常,但不是延迟行,而是延迟整个表。所以当我点击按钮时,表格等待2秒钟并吐出整行。我怎样才能像peekillet的UPDATE#2那样逐行实现添加。任何帮助将不胜感激!

 private void addActionPerformed(java.awt.event.ActionEvent evt) {     
    addData();  
 }  

public void addData(){
    Timer timer = new Timer(2000, new ActionListener() {
       public void actionPerformed(ActionEvent ae) {
          try {
                FileInputStream fstream = new FileInputStream("\\data.txt");
                BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

                String line;
                DefaultTableModel model = (DefaultTableModel) resultTable.getModel();

                while((line = br.readLine()) != null){  
                    model.addRow(new Object[]{line});
                    //System.out.println(strLine);
                 }
                fstream.close();

             } catch (FileNotFoundException ex) {
                Logger.getLogger(PIIFrame.class.getName()).log(Level.SEVERE, null, ex);
              } catch (IOException ex) {
                Logger.getLogger(PIIFrame.class.getName()).log(Level.SEVERE, null, ex);
              }
             repaint();
           }

       });  

      timer.setRepeats(false);
      timer.start();   
}

参考:peeskillet's solution

1 个答案:

答案 0 :(得分:3)

{1}}的操作处理程序在EDT上执行,这意味着您在阅读文件时阻止了EDT。在这种情况下,计时器唯一要做的就是将文件读取延迟2秒。

你不需要计时器来做这件事,你可以做这样的事情。

Timer