当前位置:  技术问答>java相关

实现走马灯效果的JLabel,但是有个小问题,大家一定要看看!!!!!!!!!!!!!

    来源: 互联网  发布时间:2015-08-16

    本文导语:  我不知道为什么?难道?哎,不知道,大家帮帮忙! 下面是一个实现走马灯效果的JLabel,即如果该Label上的字长度超过了Label的宽度,那么字就会滚动 滚动效果是这样的:如果是"abcdefg",但是Label上只有显示3个字符的宽度(...


我不知道为什么?难道?哎,不知道,大家帮帮忙!

下面是一个实现走马灯效果的JLabel,即如果该Label上的字长度超过了Label的宽度,那么字就会滚动
滚动效果是这样的:如果是"abcdefg",但是Label上只有显示3个字符的宽度(假设是等宽字体),那么Label上就这

样显示
                         abc=>(wait 10 seconds)=>bcd=>cde=>def=>efg=>
                         abc=>(wait 10 seconds)=>bcd=>...(循环往复)
但是下面的这个程序却是: abc=>bcd=>cde=>def=>efg=>(wait 10 seconds)=>
                         abc=>bcd=>...(循环往复)
两者的差异就是:我想让开始3字符多显示的时间长一点(10秒钟),但是结果确是最后3字符显示的时间变长了


package course;

import javax.swing.*;
import java.awt.FontMetrics;
import java.awt.event.*;
/**
 * 

Title: 


 * 

Description: 


 * 

Copyright: Copyright (c) 2002


 * 

Company: 


 * @author unascribed
 * @version 1.0
 */

public class JScrollLabel extends JLabel implements ActionListener{
    private int visibleWidth = 20;  // default visibleWidth
    private String oldText = "";    // save last value
    private Timer timer = new Timer(150, this); // Scroll Timer, 每150毫秒滚动一个字符
    private int subInterval = 1;    // one char per timer.trigger 每次滚动的字符数
    private FontMetrics fm = null;  // for get width of text

    public JScrollLabel() {
        this("");
    }

    public JScrollLabel(String text) {
        super(text);
        fm = getFontMetrics(getFont());
    }

    public void actionPerformed(ActionEvent e) {
        if(getText().equals("")) return;
        String newText = getText().substring(subInterval);
        int strWidth = fm.stringWidth(newText);
        
        if(strWidth > visibleWidth) {
            setTextNoPaint(newText);
        } else {
            //!!!!!!! 下面出了问题,运行就如同先sleep(10000),然后才setTextNoPaint(oldText)


            // 到最后了,现在重新开始滚动
            setTextNoPaint(oldText);
            System.out.println("setText("+oldText+")");
            //   但是需要先暂停10秒钟
            try {
                Thread.sleep(10000);
            } catch(InterruptedException ex) {
                ex.printStackTrace();
            }
            timer.restart();
        }
    }
    public void setVisibleWidth(int vWidth) {
        System.out.println("set visible width is " + vWidth);
        if(vWidth > 0)
        visibleWidth = vWidth;
    }
    /**
     * override setText(String)
     */
    public void setText(String text) {
        if(!text.equals(oldText))    {
            setTextNoPaint(text);
            oldText = text;
            // called by super(text), as timer is null that time
            if(timer!=null)    timer.restart();
        }
    }
    public void setTextNoPaint(String text) {
        super.setText(text);
    }

}

|
恭喜,我还不知道restart()!害的我找了半天, 哈哈

    
 
 

您可能感兴趣的文章:

  • iphone cocos2d 精灵的动画效果(图片,纹理,帧)CCAnimation实现
  • JS实现Office界面效果 JRibbon
  • 腾迅微博分页效果实现 PageNav
  • CSS实现光滑圆角效果
  • linux下如何实现系统托盘的效果?如同屏幕下方的clock
  • 调试jsp的时如何实现像asp中的response.end的效果
  • 在java中如何实现文字动画效果?急急急!
  • jQuery实现CSS3动画效果的插件 jQuery Transit
  • jquery实现通用版鼠标经过淡入淡出效果
  • jquery实现的导航固定效果
  • jquery实现弹出层完美居中效果
  • 使用C#实现在屏幕上画图效果的代码实例
  • CSS opacity - 实现图片半透明效果的代码
  • css实现行间距效果
  • 超级连接的提示中换行效果实现代码
  • C#键盘输入回车键实现点击按钮效果的方法
  • C#中的FileUpload 选择后的预览效果具体实现
  • winform下实现win7 Aero磨砂效果实现代码
  • jquery Ajax 实现加载数据前动画效果的示例代码
  • C# 无边框窗体边框阴影效果的简单实现
  • 用css实现的灰度/原色连接效果
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎样实现这个功能,大家都看看。。。
  • 看过操作系统设计与实现的进来看看
  • php实现socket实现客户端和服务端数据通信源代码 iis7站长之家
  • 看看有什么软件实现这个功能
  • 有没有研究linux1.0左右版本的书?我主要想看看网络部分的实现,版本越早越好
  • 请帮忙看看下面这段代码在jsp中怎么实现阿?
  • 循环显示的记录在不同的行显示出来,怎么实现??请帮我看看!!!!在线等待!!
  • 用线程实现的一个C/S通信,总有问题啊。大虾进来看看~~
  • checkbox 要实现这样一个功能不知道行不行,有兴趣的进来看看!
  • 帮忙看看这几个函数如何实现?
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • socket实现多文件并发传输,求助多线程实现问题?
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • interface 到底有什么用???实现接口,怎么实现??
  • 通过javascript库JQuery实现页面跳转功能代码
  • 怎么用Jsp实现在页面实现树型结构?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • php实现socket实现客户端和服务端数据通信源代码
  • 网站重定向用C语言实现iptables,ACL实现
  • flash AS3反射实现(describeType和getDefinitionByName)
  • 在linux下如何编程实现nslookup命令实现的IP地址和域名互相转换的功能?
  • boost unordered_map和std::list相结合的实现LRU算法
  • 求在freebsd+Squid下实现pc上网的透明代理的实现方法!给出具体配置方法的高分谢!
  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • linux下如实现与window下的驱动器实现文件共享??
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • qt如何实现:操作键盘实现数据的滚动?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 我想用APPLET实现读取客户端的图片文件,该如何实现?
  • html<pre>标签自动换行实现方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3