快捷搜索:

JLabel公告栏文字滚动效果

首先要掌握一个观点:一个字符串在谋略机屏幕中所占的像素,比方说取一个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; i1) {

text = text.substring(1, text.length()) + text.charAt(0);

label.setText(text);

label.repaint();

}

Thread.sleep(50);

}

} catch (InterruptedException ex) {

ex.printStackTrace();

}

}

}

您可能还会对下面的文章感兴趣: