WEB开发网
开发学院软件开发Java JLabel公告栏文字滚动效果 阅读

JLabel公告栏文字滚动效果

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示:首先要掌握一个概念:一个字符串在计算机屏幕中所占的像素,比方说取一个JLabel里面的Text所占的宽和高,JLabel公告栏文字滚动效果,方法如下: (主要用到FontMetrics类)importjava.awt.FontMetrics;importjavax.swing.JLabel;JLabellabel=ne

首先要掌握一个概念:一个字符串在计算机屏幕中所占的像素,比方说取一个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(100, 100, 500, 375);
        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();
        }
    }
}

1 2  下一页

Tags:JLabel 公告栏 文字

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接