随笔 - 147  文章 - 71  trackbacks - 0
<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(1)

随笔分类(146)

随笔档案(147)

文章分类(28)

文章档案(28)

喜欢的Blog

搜索

  •  

最新评论

阅读排行榜

评论排行榜

首先要掌握一个概念:一个字符串在计算机屏幕中所占的像素,比方说取一个JLabel里面的Text所占的宽和高,方法如下: (主要用到FontMetrics类)
import java.awt.FontMetrics;
import javax.swing.JLabel;

JLabel label = new JLabel("test Label ");
FontMetrics metrics = label.getFontMetrics(label.getFont());
int textH = metrics.getHeight();   //字符串的高,只和字体有关
int textW = metrics.stringWidth(label.getText());   //字符串的宽
通常情况下,一个空格占3个像素。
具体代码如下:
Test.java

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {

    
private JFrame frame;

    
private String scrolledText;

    
private String str = "滚动文字 Demo";

    
/**
     * Launch the application
     * 
@param args
     
*/

    
public static void main(String args[]) {
        
try {
            Test window 
= new Test();
            window.frame.setVisible(
true);
        }
 catch (Exception e) {
            e.printStackTrace();
        }

    }


    
/**
     * Create the application
     
*/

    
public Test() {
        initialize();
    }


    
/**
     * Initialize the contents of the frame
     
*/

    
private void initialize() {
        frame 
= new JFrame();
        frame.setBounds(
100100500375);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        
final JPanel panel = new JPanel();
        panel.setBackground(Color.WHITE);
        panel.setLayout(
new BorderLayout());
        frame.getContentPane().add(panel, BorderLayout.NORTH);

        
final JLabel label = new JLabel();
        label.setText(
"New JLabel");
        panel.add(label);

        label_scrolledText(label);

        
// 当窗体变化时要重新对label的滚动文字进行设置
        frame.addComponentListener(new ComponentAdapter() {
            
public void componentResized(ComponentEvent arg0) {
                label_scrolledText(label);
            }

        }
);
    }


    
/**
     * 滚动文字
     * 
@param label
     
*/

    
public void label_scrolledText(JLabel label) {
        
this.scrolledText = this.str;
        label.setText(scrolledText);
        FontMetrics metrics 
= label.getFontMetrics(label.getFont());
        
int textW = metrics.stringWidth(label.getText());
        Dimension frameSize 
= frame.getSize();
        
for (int i = 1; i <= (frameSize.width - textW) / 3 - 3; i++)
            scrolledText 
+= " ";
        label.setText(scrolledText);
        Thread thread 
= new Thread(new TextChanger(label));
        thread.start();
    }


}
TextChanger.java
import javax.swing.JLabel;

public class TextChanger implements Runnable {
    
private JLabel label;

    
public TextChanger(JLabel label) {
        
this.label = label;
    }


    
public void run() {
        
try {
            
while (true{
                String text 
= label.getText();
                
if (text.length() > 1{
                    text 
= text.substring(1, text.length()) + text.charAt(0);
                    label.setText(text);
                    label.repaint();
                }

                Thread.sleep(
50);
            }

        }
 catch (InterruptedException ex) {
            ex.printStackTrace();
        }

    }

}
最终的效果如图所示:
posted on 2009-09-09 20:33 飞翔天使 阅读(1655) 评论(0)  编辑  收藏 所属分类: java

只有注册用户登录后才能发表评论。


网站导航: