IT源码网

java之看不到 GRect 移动

soundcode 2024年06月03日 程序员 32 0

我想创建一个事件,以便在鼠标事件上测试真/假,在假的情况下,发生简单的动画,但我只看到动画的结果,而不是动画本身。

我已将“miss”、“dx”和“dy”定义为实例变量。

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

请您参考如下方法:

您正在阻塞事件调度线程。

执行mousePressed方法的线程与负责重新绘制的线程相同。因此,当该线程正在处理 for 循环(并在 pause 方法中等待)时,他没有机会实际重新绘制屏幕。

根据周围的基础设施,您可以使用自己的线程或 Swing 计时器来解决此问题。这意味着您可以将 for 循环替换为大致如下所示的代码:

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


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!