Java技巧: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个像素。

  具体代码如下:

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



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值