import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.HeadlessException;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JViewport;
import javax.swing.Timer;public class a extends JFrame {
  private Timer timer;
  private JLabel view;
  private JViewport window;
  
  public static void main(String[] args)
  {
    JFrame frm = new a("跑马灯");
    frm.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frm.pack();
    frm.setVisible(true);
  }
 
  public a(String title) throws HeadlessException
  {
    super(title);
    
    initComponents();
    
    addComponentListener(new ComponentAdapter() {
      public void componentResized(ComponentEvent e)
      {
        anchor = new Point();
        anchor.x = -window.getExtentSize().width;
        timer.start();
      }
    });
    
    timer = new Timer(100, new ActionListener() {
      public void actionPerformed(ActionEvent e)
      {
        animate();
      }
    });
    timer.setInitialDelay(0);
  }
 
  private void initComponents()
  {
   String s = JOptionPane.showInputDialog(null, "请输入要实现效果的文字:");
    view = new JLabel(s);
    view.setFont(Font.decode("Dialog-BOLD-36"));
    view.setForeground(Color.RED);
    
    window = new JViewport();
    window.setView(view);
    getContentPane().add(window);
  }
  
  Point anchor;
  private void animate()
  {
    Dimension extSize = window.getExtentSize();
    Dimension viewSize = view.getPreferredSize();
    anchor.x += 5;//设置移动的速度
    window.setViewPosition(anchor);
    if (anchor.x > viewSize.width)
      anchor.x = -extSize.width;
  }
}详细注释   谢谢 

解决方案 »

  1.   

    你自己仔细看看,一定看得懂的另:
    定义类名最好使用大写字母开头
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.HeadlessException;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ComponentAdapter;
    import java.awt.event.ComponentEvent;import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JViewport;
    import javax.swing.Timer;/**
     * @author Administrator
     *
     */
    /**
     * @author Administrator
     *
     */
    public class A extends JFrame {
    private Timer timer;
    private JLabel view;
    private JViewport window; /*
     * 程序入口,先生成一个A的实例
     * 这里会调用A的构造方法
     * */
    public static void main(String[] args) {
    JFrame frm = new A("跑马灯");
    frm.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frm.pack();
    frm.setVisible(true);
    } /*
     * 类A的构造方法
     */
    public A(String title) throws HeadlessException {
    super(title); initComponents(); //弹出对话框,让你输入文字 //给A增加一个component监听器,处理缩放重绘
    addComponentListener(new ComponentAdapter() {
    public void componentResized(ComponentEvent e) {
    anchor = new Point();
    anchor.x = -window.getExtentSize().width;
    timer.start();//调用定时器动作
    }
    }); //定义一个定时器。在这里定时调用animate()来实现动画
    timer = new Timer(100, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    animate();//让标签移动
    }
    });
    timer.setInitialDelay(0);
    } private void initComponents() {
    //这里实际弹出对话框
    String s = JOptionPane.showInputDialog(null, "请输入要实现效果的文字:");
    view = new JLabel(s);//把输入的文字给一个label
    view.setFont(Font.decode("Dialog-BOLD-36"));
    view.setForeground(Color.RED); window = new JViewport();
    window.setView(view);
    getContentPane().add(window);//把标签放到主界面上
    } Point anchor; //具体实现动画效果,让label的x坐标依次变化
    private void animate() {
    Dimension extSize = window.getExtentSize();
    Dimension viewSize = view.getPreferredSize();
    anchor.x += 5;// 设置移动的速度
    window.setViewPosition(anchor);
    if (anchor.x > viewSize.width)
    anchor.x = -extSize.width;
    }
    }