• 控件刷新的奥秘


    在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 }
  • 相关阅读:
    VS2010下配置CxImage
    Visual Studio 2010 开发配置
    主机屋使用感受
    Web开发者必备的20款超赞jQuery插件
    自动页面居中
    jQuery+CSS打造的网页背景颜色切换效果
    小按钮,大学问
    【网站开发必备】——12款响应式 Lightbox(灯箱)效果插件
    修正 IE 的双倍页边距 bug
    a>b?a:b
  • 原文地址:https://www.cnblogs.com/sunBinary/p/9857350.html
Copyright © 2020-2023  润新知