利用SwingWorker,从文件中读取内容,显示到JTextArea中
2012-05-22 08:21
381 查看
class SwingWorkerFrame extends JFrame { public SwingWorkerFrame() { chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); textArea = new JTextArea(); add(new JScrollPane(textArea)); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); statusLine = new JLabel(" "); add(statusLine, BorderLayout.SOUTH); JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu); openItem = new JMenuItem("Open"); fileMenu.add(openItem); openItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { int result = chooser.showOpenDialog(null); if(result == JFileChooser.APPROVE_OPTION) { textArea.setText(""); openItem.setEnabled(false); textReader = new TextReader(chooser.getSelectedFile()); textReader.execute(); cancelItem.setEnabled(true); } } }); cancelItem = new JMenuItem("Cancel"); fileMenu.add(cancelItem); cancelItem.setEnabled(false); cancelItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { textReader.cancel(true); } }); } private class ProgressData { public int number; public String line; } private class TextReader extends SwingWorker<StringBuilder, ProgressData> { public TextReader(File file) { this.file = file; } @Override public StringBuilder doInBackground() throws Exception { int lineNumber = 0; Scanner in = new Scanner(new FileInputStream(file)); while(in.hasNextLine()) { String line = in.nextLine(); lineNumber++; text.append(line); text.append("\n"); ProgressData data = new ProgressData(); data.number = lineNumber; data.line = line; publish(data); Thread.sleep(1); } return text; } @Override public void process(List<ProgressData> data) { if(isCancelled()) { return; } StringBuilder b = new StringBuilder(); statusLine.setText("" + data.get(data.size() - 1).number); for(ProgressData d : data) { b.append(d.line); b.append("\n"); } textArea.append(b.toString()); } @Override public void done() { try { StringBuilder result = get(); textArea.setText(result.toString()); statusLine.setText("Done"); } catch (InterruptedException e) { } catch (CancellationException e) { textArea.setText(""); statusLine.setText("Cancelled"); } catch(ExecutionException e) { statusLine.setText("" + e.getCause()); } cancelItem.setEnabled(false); openItem.setEnabled(true); } private File file; private StringBuilder text = new StringBuilder(); } private JFileChooser chooser; private JTextArea textArea; private JLabel statusLine; private JMenuItem openItem; private JMenuItem cancelItem; private SwingWorker<StringBuilder, ProgressData> textReader; public static final int DEFAULT_WIDTH = 450; public static final int DEFAULT_HEIGHT = 350; }
相关文章推荐
- SpringMVC(11):利用数据流InputStream 读取调用 database.properties 配置文件的内容及实例
- ASP读取显示TXT文件内容
- spingmvc的外置properties文件读取(java循环利用properties内容)
- MFC中利用CFile类读取文件内容
- 【ASP.NET 进阶】定时执行任务实现 (定时读取和修改txt文件数字内容,无刷新显示结果)
- perl 利用管道读取压缩文件内容
- 利用POI读取老版本的word和excel以及txt文件的内容
- C语言向文件写入内容并读取显示
- 读取文件并在屏幕上显示内容
- java读取excel、txt 文件内容,传到、显示到另一个页面的文本框里面。
- VB.NET 打开Excel文件,读取Excel内容,添加到DataGridView中并显示
- 利用PushbackReader读取文件中某个字符串之前的内容
- 利用stl函数读取文件内容的问题
- 在ASP中利用ADO显示Excel文件内容的函数
- Java Swing如何实时刷新JTextArea,以显示刚才加append的内容
- 本实例创建Swing窗体,单击窗体中的“写入文件”按钮实现写入功能,单击“读取文件”按钮实现从文件中读取信息显示在文本框中
- 利用stringstream将文件中的内容一行行读取并输出出来
- 利用pdfbox读取pdf文件内容和图片
- c# winform项目treeview控件绑定本地电脑磁盘信息,读取文件夹信息,显示文件夹内文件内容
- ASP读取显示TXT文件内容