有个问题请指教!

tairan 2003-04-04 05:40:41

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class Nn extends Applet implements ActionListener {
private TextField numberField;
private Button bar1,bar2;
private int x=300,xChange =4,a,number;
private int y=250,yChange=2;
private int diameter=12;
private int rectLeftX=200,rectRightX=560;
private int rectTopY=200,rectBottomY=400;



public void init(){
bar1=new Button ("start");
add(bar1);
bar1.addActionListener(this);
bar2=new Button ("stop");
add(bar2);
bar2.addActionListener(this);
numberField=new TextField(8);
add(numberField);
numberField.addActionListener(this);}


public void actionPerformed(ActionEvent event){
number=Integer.parseInt(numberField.getText());
if(event.getSource()==bar1)
{a=1;}
if(event.getSource()==bar2)
{a=2;}
repaint();}

public void paint (Graphics g){
g.setColor(Color.green);
g.fillRect(rectLeftX,rectTopY,rectRightX-rectLeftX,rectBottomY-rectTopY);

g.setColor(Color.red);
g.fillOval(x,y,diameter,diameter);
if(a==1){
for (int n=0;n<number;n++){

Color backgroundColour=getBackground ();
g.setColor(backgroundColour.green);

g.fillOval(x,y,diameter,diameter);


if (x<=rectLeftX)
xChange=-xChange;
if(x>=(rectRightX-12))
xChange=-xChange;
if (y<=rectTopY)
yChange=-yChange;
if(y>=(rectBottomY-12))
yChange=-yChange;

x=x+xChange;
y=y+yChange;


g.setColor(Color.red);
g.fillOval(x,y,diameter,diameter);

try {Thread .sleep(2);} catch(InterruptedException e) {}
}

g.drawString("完成",600,300);

if(a==2)
{xChange=0;
yChange=0;
}

}
}
}

我怎么能在小球运动的过程中点“stop"让它停止?
先谢谢了。


...全文
63 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
moumouren 2003-04-04
  • 打赏
  • 举报
回复
up有分
bluesmile979 2003-04-04
  • 打赏
  • 举报
回复
错了一点

runflag应该是属于mainclass的,粘帖的时候失误了:)
bluesmile979 2003-04-04
  • 打赏
  • 举报
回复
你这里的错误在于你认为try {Thread .sleep(2);} catch(InterruptedException e加上这个sleep之后cpu应该是可以把时间用来监听其他的事件。但是实际上你现在的程序中actionPerformed没有执行完,你的监听器响应不到事件。这里要用到多线程的。我把大概思路写给你


import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class Nn extends Applet implements ActionListener {
private boolean runflag=false;
private mainclass mc = null
private class mainclass
{
public void run(){
while( runflag ){
dosomthing
}
}
}

class start implements ActionListener
{
mc = new mainclass();
mc.runflag = true;
mc.start();

}
class start implements ActionListener
{
mc.runflag = false;
mc=null;
}

}
helpall 2003-04-04
  • 打赏
  • 举报
回复
easy one:
1. add boolean m_forceSleep = false; as data member

2. change
do{
try{Thread.sleep(2); }catch...
}while(m_forceSleep);

3. change
in actionPerformed
if(start)
m_forceSleep = false;
if(stop)
m_forceSleep = true;

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧