import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Moving extends Frame implements ActionListener,Runnable{

Thread move=null;
boolean run=true;
public int i=0;
int sleeptime;
TextField text_sleep; 
Label label=new Label("                                   Welcome!");
Button button_start=new Button("启动");
Button button_interrupt=new Button("中断");
public Moving()
{
super("滚动字");
move=new Thread(this);
setLayout(new FlowLayout());
add(button_start);add(button_interrupt);
add(label);
button_start.addActionListener(this);
button_interrupt.addActionListener(this);
Panel panel_sub = new Panel(new FlowLayout(FlowLayout.LEFT)); 
        this.add(panel_sub);
        panel_sub.add(new Label("SleepTime"));
        this.sleeptime = (int)(Math.random()*1000);     //产生随机数作为间隔时间
        text_sleep = new TextField(""+sleeptime,5);
        panel_sub.add(text_sleep);
        text_sleep.addActionListener(this);
setSize(200,100);
setLocation(300,300);
pack();
setVisible(true);
addWindowListener(new WindowCloser());
}
 public class WindowCloser extends WindowAdapter
 {
 public void windowClosing(WindowEvent e)
 {
 System.exit(0);
 }
 }
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button_start)
{
run=true;
move=new Thread(this);
move.start();
}
if(e.getSource()==button_interrupt)
{
run=false;
}
}
public void run()
{
while(run)
{
i++;
label.setLocation(label.getX()-2*i,label.getY());
try
{
move.sleep(sleeptime);
}
catch(InterruptedException ie){break;}
}
}
public static void main(String[] args) {
Moving t_ex=new Moving(); }}
请大侠们给我看看,      i++;
label.setLocation(label.getX()-2*i,label.getY());
这两条语句,我想实现字幕滚动,但是我现在的的问题就是i++,得到的字幕情况就是一直往左边滚动,回不到开始的位置····这个问题怎么解决啊?我是初学者,很多方法没有掌握,求解啊····

解决方案 »

  1.   

    i++下面加上一句if(i==100){
        i=1;
    }
      

  2.   

    因为你的label.getX()-2*i随着i不断地增大时,当整个位置小于0的时候就超出左边了,
    所以你要在减到0的时候要往回加,这样才会实现来回滚动
    if(label.getX()-2*i<0)
     {
     i=-i;
     i--;
     }
     else
     {
     i++;
     }
     
     label.setLocation(label.getX()-2*i,label.getY());
      

  3.   

    i一直加,肯定不会回来啦,你在while(run)后加一个控制i变量的语句就行了!