JAVA jtextarea怎么实时刷新
比如从文件里读取数据(N行)然后读一行到Jtextarea就显示一行出来,网上搜到paintImmediately这个方法,但是显示的时候会有很多白的地方,然后在最后才显...
比如从文件里读取数据(N行)然后读一行到Jtextarea就显示一行出来,网上搜到paintImmediately这个方法,但是显示的时候会有很多白的地方,然后在最后才显示完全。求大神
展开
展开全部
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方法?
展开全部
为什么非得读到一行显示一行? 都读取出来 放到一个String数组里,然后一块塞给jtextarea多好
如果你想要一行一行的显示效果,完全可以操作这个数组啊. (写个静态方法 专门负责刷新jtextarea 往里面添加一条就刷新一次. )
如果你想要一行一行的显示效果,完全可以操作这个数组啊. (写个静态方法 专门负责刷新jtextarea 往里面添加一条就刷新一次. )
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哦那个说用数组的方法应该是可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询