SwingWorker实现旋转等待提示的功能
2017-07-05 11:11
260 查看
最近在用swing写一个扫描电脑里文件的小程序时,由于扫描是一件很耗时的操作,所以每次在点击按钮后要等很久才能出结果,而中途有没有什么提示,显得很不友好,本想写一个进度条来显示,又觉得太麻烦,最后就写了一个旋转等待的dialog来进行友好提示“正在扫描中,请稍等…”,效果如下:
![](http://img.blog.csdn.net/20170705105121203?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmc0MTIyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
WaitUnit.java代码如下:
然后在SwingWorker中调用代码:
接下来是旋转图片以及java代码:
WaitUnit.java代码如下:
package com.scan.server.swing.unit; import java.awt.BorderLayout; /** * 旋转等待的dialog * @author ZYH * @time:2017年7月5日 */ public class WaitUtil extends JDialog { private static final long serialVersionUID = 6987303361741568128L; private final JPanel contentPanel = new JPanel(); /** * Create the dialog. */ public WaitUtil() { setBounds(0, 0, 232, 94); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); contentPanel.setLayout(null); { JLabel lblLoading = new JLabel("扫描中,请稍后..."); lblLoading.setForeground(Color.DARK_GRAY); lblLoading.setOpaque(false); lblLoading.setIcon(Imgs.getImage("iwait.gif")); lblLoading.setFont(new Font("宋体", Font.PLAIN, 15)); lblLoading.setBounds(0, 0, 252, 94); contentPanel.add(lblLoading); } setModalityType(ModalityType.APPLICATION_MODAL); //置顶显示 setUndecorated(true); //禁用或启用此窗体的装饰(true:禁用;false:启用) setLocationRelativeTo(null); //设置窗口相对于指定组件的位置(null表示置于屏幕的中央) } }
然后在SwingWorker中调用代码:
package com.scan.server.test; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingWorker; import javax.swing.border.EmptyBorder; import com.scan.server.swing.unit.WaitUtil; /** * 测试旋转等待提示框 * @author ZYH * @time:2017年7月5日 */ public class TestWaitUnit extends JFrame { private JPanel contentPane; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { TestWaitUnit frame = new TestWaitUnit(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public TestWaitUnit() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); int windowWidth = this.getWidth(); //获得窗口宽 int windowHeight = this.getHeight(); //获得窗口高 Toolkit kit = Toolkit.getDefaultToolkit(); //定义工具包 Dimension screenSize = kit.getScreenSize(); //获取屏幕的尺寸 int screenWidth = screenSize.width; //获取屏幕的宽 int screenHeight = screenSize.height; //获取屏幕的高 setLocation(screenWidth/2-windowWidth/2, screenHeight/2-windowHeight/2);//设置窗口居中显示 JPanel panel = new JPanel(); contentPane.add(panel, BorderLayout.NORTH); JButton button = new JButton("\u6D4B\u8BD5\u65CB\u8F6C\u7B49\u5F85"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //旋转等待显示 final WaitUtil waitUtil = new WaitUtil(); SwingWorker<String, Void> sw = new SwingWorker<String, Void>() { StringBuffer sb = new StringBuffer(); @Override protected String doInBackground() throws Exception { //-------------模拟任务开始--------------- for(int i = 0; i < 100; i++){ sb.append("" + i); System.out.println(sb.toString()); Thread.sleep(50); } //--------------模拟任务结束-------------- return sb.toString(); } @Override protected void done() { //将耗时任务执行完得到的结果移至done来进行处理,处理完关闭旋转等待框 try { String result = get(); System.out.println(result); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // 关闭旋转等待框 if(waitUtil != null) { waitUtil.dispose(); } } }; sw.execute(); waitUtil.setVisible(true); //将旋转等待框WaitUnit设置为可见 } }); panel.add(button); } }
接下来是旋转图片以及java代码:
package com.scan.server.img; import java.awt.Toolkit; import javax.swing.ImageIcon; public class Imgs { public static ImageIcon getImage(String filename){ return new ImageIcon(Toolkit.getDefaultToolkit().getImage(Imgs.class.getResource(filename))); } }
相关文章推荐
- !!C# BackgroundWorker异步操作以及实现等待提示窗体功能---C#中此方法比多线程用的多
- Android编程实现ListView滚动提示等待框功能示例
- 简单的实现事件过程中友好等待提示功能
- 实现功能:弹出一个DIV层提示等待信息,这个时候禁用用户操作页面中的其他内容
- Java气泡提示功能实现
- javascript搜索自动提示功能的实现第1/3页
- 小信使功能实现新邮件提示,MSN一样的方法弹出的实现方法
- 用JAVA实现线程等待提示框
- ASP.NET中实现类似MSN消息提示功能
- ajax实时任务提示功能的实现代码第1/2页
- DWR使用:文字提示功能实现、简易聊天室
- Java气泡提示功能实现
- 实现google那种输入框提示的功能
- 如何在asp.net中用jQuery实现便捷的提示功能和表单验证功能
- ajax实时任务提示功能的实现 -- vb2005xu自己动手系列(1)
- ajax实现搜索提示功能 (关键字自动匹配功能)
- Dhtml+正则实现类似IDE编辑器的动态提示输入功能
- Dhtml+正则实现类似IDE编辑器的动态提示输入功能
- jQuery(Ajax)/PHP/MySQL实现搜索自动提示功能
- ajax实时任务提示功能的实现代码第1/2页