程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JLabel公告欄文字滾動效果

JLabel公告欄文字滾動效果

編輯:關於JAVA

首先要掌握一個概念:一個字符串在計算機屏幕中所占的像素,比方說取一個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. 下一頁:
Copyright © 程式師世界 All Rights Reserved