9.3 ProgressMonitorInputStream类
ProgressMonitorInputStream类表示一个输入流过滤器,这个输入流过滤器使用ProgressMonitor来检测一个输入流的读取。如果读取需要较长的时间完成,则会显示ProgressMonitor,且用户可以选择弹出窗口中的Cancel按钮,从而使得读取被中断并且输入流会抛出一个InterruptedIOException。
9.3.1 创建ProgressMonitorInputStream
类似于其他的过滤器流,ProgressMonitorInputStream是使用一个到需要过滤的流的引用来创建的。除了到这个过滤器的引用,ProgressMonitorInputStream的构造函数还需要其ProgressMonitor的两个参数:父组件以及一个消息。正如在这里所看到的,构造函数首先需要ProgressMonitor参数:
public ProgressMonitorInputStream(
Component parentComponent, Object message, InputStream inputStream)
与JOptionPane与ProgressMonitor类似,消息参数是一个Object,而不是一个String,所以我们可以在多行上显示一个组件数组或是字符串。下面的代码创建了一个ProgressMonitorInputStream。
FileInputStream fis = new FileInputStream(filename);
ProgressMonitorInputStream pmis =
new ProgressMonitorInputStream(parent, "Reading " + filename, fis);
9.3.2 使用ProgressMonitorInputStream
与所有的输入流一样,一旦我们创建了ProgressMonitorInputStream,我们需要由其中进行读取。如果输入流的读取不够快,底层的ProgressMonitor会使得进程弹出窗口显示。一旦这个窗口显示,用户可以监视进程或是通过选择Cancel按钮关闭读取。如果Cancel按钮被选中,则InterruptedIOException会被抛出,而异常的bytesTransferred或会被设置为已经成功读取的字节数。
图9-7显示了一个ProgressMonitorInputStream弹出窗口的样子。略为不同的是,弹出窗口在消息区域使用两个JLabel组件,而不是一个。
列表9-6显示了完整的源代码示例。其中粗体显示的代码行是使用ProgressMonitorInputStream的关键。他们设置对话框的消息并且创建输入流。程序使用一个由命令行指定的文件名,读取文件,并且将文件拷贝到标准输出。如果文件足够大,进程监视器将会显示。如果我们按下Cancel按钮,读取停止,并且Canceled会被输出到标准错误。
package swingstudy.ch09;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InterruptedIOException;
import javax.swing.JLabel;
import javax.swing.ProgressMonitorInputStream;
public class ProgressInputSample {
public static final int NORMAL = 0;
public static final int BAD_FILE = 1;
public static final int CANCELED = NORMAL;
public static final int PROBLEM = 2;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int returnValue = NORMAL;
if(args.length != 1) {
System.err.println("Usage:");
System.err.println("java ProgressInputSample filename");
}
else {
try {
FileInputStream fis = new FileInputStream(args[0]);
JLabel filenameLabel = new JLabel(args[0], JLabel.RIGHT);
Object message[] = {"Reading:", filenameLabel};
ProgressMonitorInputStream pmis = new ProgressMonitorInputStream(null, message, fis);
InputStreamReader isr = new InputStreamReader(pmis);
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
catch(FileNotFoundException exception) {
System.err.println("Bad File "+exception);
returnValue = BAD_FILE;
}
catch(InterruptedIOException exception) {
System.err.println("Canceled");
returnValue = CANCELED;
}
catch(IOException exception) {
System.err.println("I/O Exception "+exception);
returnValue = PROBLEM;
}
}
System.exit(returnValue);
}
}
9.3.3 ProgressMonitorInputStream属性
表9-7显示了ProgressMonitorInputStream的属性。ProgressMonitor在输入流创建时创建。我们不需要修改ProgressMonitor。然而我们也许需要在弹出窗口显示之前提供一个或长或短的时延(ProgressMonitor的millisToDecideToPopup属性)。
分享到:
相关推荐
功能强大的弹出窗口选择器,支持模糊检索功能,通过配置文件可以使用多个检索关键字,支持托转功能,配置简单,使用方便,欢迎大家改进组件,奉上源代码。
ASP开发实例 窗口及页面设置的一些样式 鼠标单击链接样式 为弹出的窗口加入关闭按钮 日期选择器 弹出全屏显示网页 关闭IE主窗口时,不弹出询问对话框 弹出网页对话框 安徽机电职业技术学院 陈伟
3、弹出窗口解决方案。 4、Table列表、录入控件演示程序。 5、Refer选择控件演示程序。 6、示例程序布局使用EasyUI。 7、JS用compiler.jar压缩、CSS用yuicompressor-2.4.2.jar压缩加快运行速度。 含查询...
制作编辑器时需要选择日期时弹出日历窗口供选择。
wagtail-generic-chooser提供了基础类,用于为Wagtail管理员构建选择器弹出窗口和表单小部件,以匹配Wagtail内置的页面,文档,摘要和图像选择器的外观。 它与现有的模型选择器附加组件( , , )不同,其设计目的...
##Overview jQuery MiniPopup 插件可帮助您轻松创建自定义弹出窗口。 ##API ###方法 ###open(callback) 打开弹出窗口。 在弹出窗口打开时调用回调函数。 ###close(callback) 关闭弹出窗口。 在弹出窗口关闭时...
2、另类定位弹出颜色选择器的位置。 注意:窗口_定位颜色选择器窗口用途 的大小不要太大,不然的话,如果有一些用户显示器双屏的话,颜色选择器会跑到屏2 另外,大家也可以升级一下,把自定义颜色的字节集保存到...
点击输入框右侧的颜色选择器,弹出的窗口中选择你所需要的颜色值,确定后颜色值代码即可输入到输入框中,懒人之家推荐下载
此Sublime Text软件包为Adobe Brackets中的图像和CSS颜色提供了悬停预览弹出窗口。 悬停弹出窗口的设计旨在从“括号”中复制“快速查看”功能的样式,但是它使用基于配色方案的自适应颜色,并且插件逻辑是从头开始...
NEW相关模式(代替旧的弹出窗口,可选) NEW环境名称/标记 NEW语言选择器 兼容性/样式优化: django-ckeditor django-dynamic-raw-id django-json-widget django-modeltranslation django-tabbe
主要介绍了如何点击一个按钮实现弹出一个居中窗口,并且此窗口带有半透明的遮罩层效果,需要的朋友可以参考下
适用于iPhone,iPad,模式表,弹出窗口...几乎在任何地方。 使用iOS彩色选择器 安装 使用iOS-Color-Picker的最简单方法是使用 。 Podfile添加到您的Podfile 。 pod 'iOS-Color-Picker' 否则,您需要在项目中包括...
核心形式 CoreForms是一组Coldfusion自定义标记,可帮助您轻松构建... 表单具有内置的验证,JavaScript日历,帮助说明弹出窗口和颜色选择器。 这些表格旨在使添加和更新记录变得容易。 应该与Coldfusion 6+一起使用
一款小巧的jQuery手机移动端时分秒时间选择器代码,点击遮罩弹出时间选择窗口,触屏滑动分别选择时分秒。
而后,隔三岔五的就从屏幕右下角弹出~是不是感觉很讨厌 拖慢机器速度不说,有时候还容易打乱人的思路 那该如何解决呢 使用这款拦截右下角广告的利器吧!!!华华窗口拦截器 本软件的主要功能就是拦截右下角广告和各种...
ArminC uBlock Settings是uBlock Origin的配置文件,它由几个高质量的过滤器组成,旨在阻止广告,弹出窗口,跟踪器,恶意地址并减少已加载元素的数量,从而更快地加载页面。 安装 下载和安装步骤: 最新版本的设置...
直接选择颤振DirectSelect是一个选择控件,具有飘渺的全屏模式弹出窗口,在与之交互时显示可用选项。 受启发。 在中。的iOS安卓用法创建DirectSelectList并使用itemBuilder将其填充项目 final dsl = ...
主要介绍了js实现可得到不同颜色值的颜色选择器,实例分析了javascript颜色操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
表情符号选择器这个库显示一个弹出框来为iOS选择表情符号要求iOS 9.0或更高版本Xcode 9.0或更高版本安装有一种在项目中使用EmojiPicker的方法: 使用CocoaPods使用CocoaPods安装pod 'EmojiPicker', '1.1'建立项目...