在JAVA GUI的设计里面,swing 是我们很熟悉的了。现在就然我来介绍一个不错的类给你吧。互相学习吧。它就是
ProgressMonitorInputStream 可不要以为它是在java.io包里面的哟,它可真的是在java.swing包中的呢。以下是它的类继承关系:
javax.swing
类 ProgressMonitorInputStream
java.lang.Objectjava.io.InputStream
java.io.FilterInputStream
javax.swing.ProgressMonitorInputStream
-
所有已实现的接口:
- Closeable
-
监视读取某些 InputStream 的进度。大致用以下形式调用此 ProgressMonitor:
InputStream in = new BufferedInputStream( new ProgressMonitorInputStream( parentComponent, "Reading " + fileName, new FileInputStream(fileName)));
这可以创建一个进度监视器,以监视读取输入流的进度。如果需要一段时间,将会弹出 ProgressDialog,以通知用户。如果用户单击 Cancel 按钮,则在进行下一次读取操作时会抛出 InterruptedIOException。当关闭流时,会执行所有的正确清除。
-
构造方法详细信息 ProgressMonitorInputStream
public ProgressMonitorInputStream(Component parentComponent, Object message, InputStream in)
-
构造一个对象,以监视输入流的进度。
-
参数:
-
message
- 要在对话框(如果弹出)中放置的描述性文本。 -
parentComponent
- 触发被监视操作的组件。 -
in
- 要监视的输入流。
-
-
构造一个对象,以监视输入流的进度。
更多的信息可以参看API 文档。 下面贴出一个例子程序。
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.*;
import javax.swing.JFileChooser;
import javax.swing.ProgressMonitorInputStream;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import java.awt.EventQueue;
public class TextFrame extends JFrame
{
private JMenuBar jMenuBar1 = new JMenuBar();
private JMenu jMenu1 = new JMenu();
private JMenuItem jMenuItem1 = new JMenuItem();
private JMenuItem jMenuItem2 = new JMenuItem();
private JScrollPane jScrollPane1 = new JScrollPane();
private JTextArea textArea = new JTextArea();
public TextFrame()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void jbInit() throws Exception
{
this.getContentPane().setLayout(null);
this.setSize(new Dimension(400, 301));
this.setJMenuBar(jMenuBar1);
jMenu1.setText("File");
jMenu1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jMenu1_actionPerformed(e);
}
});
jMenuItem1.setText("Exit");
jMenuItem1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jMenuItem1_actionPerformed(e);
}
});
jMenuItem2.setText("Open");
jScrollPane1.setBounds(new Rectangle(140, 35, 2, 2));
textArea.setBounds(new Rectangle(15, 5, 365, 210));
jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2);
jMenuBar1.add(jMenu1);
this.getContentPane().add(textArea, null);
this.getContentPane().add(jScrollPane1, null);
}
private void jMenuItem1_actionPerformed(ActionEvent e)
{
System.exit(0);
}
public void openFile() throws IOException
{
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileFilter(
new javax.swing.filechooser.FileFilter()
{
public boolean accept(File f)
{
String fname = f.getName().toLowerCase();
return fname.endsWith(".txt") || f.isDirectory();
}
public String getDescription()
{
return "Text Files";
}
});
int r = chooser.showOpenDialog(this);
if (r != JFileChooser.APPROVE_OPTION) return;
final File f = chooser.getSelectedFile();
// set up stream and reader filter sequence
FileInputStream fileIn = new FileInputStream(f);
ProgressMonitorInputStream progressIn
= new ProgressMonitorInputStream(this, "Reading " + f.getName(), fileIn);
final BufferedReader in = new BufferedReader(new InputStreamReader((progressIn)));
// the monitored activity must be in a new thread.
Runnable readRunnable = new
Runnable()
{
public void run()
{
textArea = new JTextArea();
try{
String line =in.readLine();
while (line!=null)
{
textArea.append(line);
textArea.append("/n");
line =in.readLine();
}
in.close();
}catch(IOException ioe){}
// set content pane in the event dispatch thread
EventQueue.invokeLater(new
Runnable()
{
public void run()
{
setContentPane(new JScrollPane(textArea));
validate();
}
});
}
};
Thread readThread = new Thread(readRunnable);
readThread.start();
}
private void jMenuItem2_actionPerformed(ActionEvent e)
{
try
{
openFile();
}
catch(IOException exception)
{
exception.printStackTrace();
}
}
public static void main(String[] args)
{
JFrame frame=new TextFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}