Java技巧:JLabel公告栏文字滚动效果

来源:互联网 发布:wms仓储管理系统源码 编辑:程序博客网 时间:2024/05/21 14:59

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

  具体代码如下:

   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();   }   }
   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();   }   }   }



原创粉丝点击