Java Can';我看不出有什么进展
我想创建一个事件,以便在鼠标事件上测试真/假,在假的情况下,会出现一个简单的动画,但我只看到动画的结果,而不是动画本身 我已经将“miss”、“dx”和“dy”定义为实例变量Java Can';我看不出有什么进展,java,Java,我想创建一个事件,以便在鼠标事件上测试真/假,在假的情况下,会出现一个简单的动画,但我只看到动画的结果,而不是动画本身 我已经将“miss”、“dx”和“dy”定义为实例变量 public void mousePressed(MouseEvent e) { swingSword(); determineHit(); if (determineHit()){ GRect test = new GRect(testX, testY, BRICK_WID
public void mousePressed(MouseEvent e) {
swingSword();
determineHit();
if (determineHit()){
GRect test = new GRect(testX, testY, BRICK_WIDTH, BRICK_HEIGHT);
test.setFilled(true);
test.setFillColor(Color.GREEN);
add(test);
testX += 30;
}
else {
GRect test = new GRect(testX, testY, BRICK_WIDTH, BRICK_HEIGHT);
test.setFilled(true);
test.setFillColor(Color.RED);
add(test);
testX += 30;
miss = new GRect(200, 200, BRICK_WIDTH, BRICK_HEIGHT);
miss.setFilled(true);
miss.setFillColor(Color.RED);
add(miss);
for (int i = 0; i < 10; i++){
miss.move(dx, dy);
pause(200);
}
}
}
public void鼠标按下(MouseEvent e){
swingSword();
确定它();
if(determineHit()){
GRect测试=新GRect(testX、testY、砖宽、砖高);
test.setFilled(真);
测试。设置填充颜色(颜色为绿色);
添加(测试);
testX+=30;
}
否则{
GRect测试=新GRect(testX、testY、砖宽、砖高);
test.setFilled(真);
测试。设置填充颜色(颜色为红色);
添加(测试);
testX+=30;
未命中=新GRect(200,200,砖宽,砖高);
setFilled小姐(对);
小姐。setFillColor(颜色。红色);
添加(未命中);
对于(int i=0;i<10;i++){
未命中移动(dx,dy);
暂停(200);
}
}
}
您正在阻止事件分派线程
执行mousePressed
方法的线程与负责重新绘制的线程相同。因此,当该线程处理for
-循环(并在pause
方法中等待)时,他没有机会实际重新绘制屏幕
根据周围的基础设施,您可以使用自己的线程或swing计时器来解决这个问题。这意味着您可以将-循环的替换为大致如下所示的代码:
final Timer timer = new Timer(200, null);
timer.addActionListener(new ActionListener()
{
int counter = 0;
@Override
public void actionPerformed(ActionEvent e)
{
miss.move(dx, dy);
counter++;
if (counter >= 10)
{
timer.stop();
}
}
});
timer.start();
啊,acm,在放弃学习java之前我必须学习什么。这段代码怎么了?我没有看到GRect“miss”在屏幕上移动,GRect只是出现在总延迟计数的末尾。