zoukankan      html  css  js  c++  java
  • 控件刷新的奥秘

    在swing中实现动态刷新组建内容是相当一件不给力的事情,例如JLable、LTextFiled等组件,其本身也提供了一些updateUI()、validate()以及paintImmediately()等等与界面刷新和组件重绘相关的方法,但通常都是不起作用的。

    1 for (int i = 0; i < 5; i++) {
    2     lblText.setText(String.format("当前进度:%s", i));
    3     lblText.updateUI();
    4     try {
    5         Thread.sleep(1000);
    6     } catch (Exception e1) {
    7         e1.printStackTrace();
    8     }
    9 }

    希望每隔一秒种刷新一下Label内容,然而愿望是美好的,现实是残酷的,并没有出现我预想中的效果,仅仅显示了最终的结果,中间的过程忽略了。因为每次调用setText都是在主线程中执行的,而前几次调用之后线程并没有退出,所以界面也就没有刷新了^_^,只有最后一次执行完后线程才会退出,此时也就进行了刷新。找到了原因,解决也就相对变得容易了一些:

    Java Swing中界面刷新是线程同步的

    1.可以采用多线程运行

     1 new Thread(new Runnable(){
     2     @Override
     3     public void run() {
     4         try {
     5             for(int i = 0;i < 5; i++) {
     6                 lblText.setText(String.format("当前进度:%s", i));
     7                 Thread.sleep(1000);    
     8             }
     9         } catch (Exception e) {
    10             e.printStackTrace();
    11         }
    12     }
    13 }).start();

    2.结合JScrollPane实现及时动态刷新。在窗体区域创建一个JScrollPane组件,然后将JLabel组件放入JScrollPane中,执行以下代码,同样可以实现内容及时动态刷新。

    1 try {
    2     for(int i = 0; i < 5; i++) {
    3         this.lblText.setText(String.format("当前进度:%s", i));
    4         this.lblText.updateUI(this.lblText.getBounds());
    5         Thread.sleep(1000);    
    6     }
    7 } catch (Exception e) {
    8     e.printStackTrace();
    9 }
  • 相关阅读:
    ubuntu下文件安装与卸载
    webkit中的JavaScriptCore部分
    ubuntu 显示文件夹中的隐藏文件
    C语言中的fscanf函数
    test
    Use SandCastle to generate help document automatically.
    XElement Getting OuterXML and InnerXML
    XUACompatible meta 用法
    Adobe Dreamweaver CS5.5 中文版 下载 注册码
    The Difference Between jQuery’s .bind(), .live(), and .delegate()
  • 原文地址:https://www.cnblogs.com/sunBinary/p/9857350.html
Copyright © 2011-2022 走看看