JAVA jtextarea怎么实时刷新

比如从文件里读取数据(N行)然后读一行到Jtextarea就显示一行出来,网上搜到paintImmediately这个方法,但是显示的时候会有很多白的地方,然后在最后才显... 比如从文件里读取数据(N行)然后读一行到Jtextarea就显示一行出来,网上搜到paintImmediately这个方法,但是显示的时候会有很多白的地方,然后在最后才显示完全。求大神 展开
 我来答
hardneedl
2013-06-28 · TA获得超过921个赞
知道小有建树答主
回答量:1353
采纳率:57%
帮助的人:598万
展开全部
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.List;
/**
 * @author Hardneedl
 */
final class ReadFileDemo extends JFrame {
    public String getTitle() {return "ReadFileDemo";}
    static private final Dimension size = new Dimension(600,400);
    public Dimension getPreferredSize() {return size;}
    public Dimension getMaximumSize() {return size;}
    public Dimension getMinimumSize() {return size;}
    public Dimension getSize(){return size;}
    private class OpenFileAction extends AbstractAction{
        private JFileChooser chooser;
        private OpenFileAction() {
            super("open file ...");
        }

        public void actionPerformed(ActionEvent e) {
            if(chooser==null){
                chooser=new JFileChooser(".");
                chooser.setDialogTitle("open file");
                chooser.setDialogType(JFileChooser.OPEN_DIALOG);
                chooser.setMultiSelectionEnabled(false);
            }

            if(JFileChooser.APPROVE_OPTION==chooser.showOpenDialog(null)){
                final File file = chooser.getSelectedFile();
                if (file!=null) {
                    new ReadWorker(textArea,file).execute();
                }
            }

        }
    }
    private class ReadWorker extends SwingWorker<String,String>{
        private JTextArea textArea;
        private File file;
        private ReadWorker(JTextArea textArea,File file) {
            this.textArea=textArea;
            this.file=file;

        }

        protected String doInBackground() throws Exception {
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String s;
            while( (s=reader.readLine())  !=null){
                publish(s);
            }

            return "OK!";
        }

        protected void process(List<String> chunks) {
            for(String s:chunks){
                try {
                    textArea.getDocument().insertString(textArea.getDocument().getLength(),s+"\r\n",null);
                } catch (BadLocationException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    private JButton openButton;
    private JTextArea textArea;

    ReadFileDemo() throws HeadlessException {
        init();
        attachListeners();
        doLay();
    }


    private void init(){
        openButton=new JButton(new OpenFileAction() );
        textArea=new JTextArea();
    }

    private void attachListeners(){
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void doLay(){
        Container container = getContentPane();
        container.add(openButton,BorderLayout.NORTH);
        container.add(new JScrollPane(textArea),BorderLayout.CENTER);
        pack();
        setVisible(true);
    }
    public static void main(String...args) {
        System.setProperty("swing.defaultlaf","com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        SwingUtilities.invokeLater(
            new Runnable(){
                public void run() {
                    new ReadFileDemo();
                }
            }
        );
    }
}
追问
55行publish是不是写错了? 是下面那个process方法?
小圣12345
2013-06-28 · TA获得超过820个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:156万
展开全部
为什么非得读到一行显示一行? 都读取出来 放到一个String数组里,然后一块塞给jtextarea多好
如果你想要一行一行的显示效果,完全可以操作这个数组啊. (写个静态方法 专门负责刷新jtextarea 往里面添加一条就刷新一次. )
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小林望北
2013-06-28 · TA获得超过101个赞
知道答主
回答量:119
采纳率:0%
帮助的人:31.9万
展开全部
哦那个说用数组的方法应该是可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式