java - 在 Java、AWT 中,repaint-method 似乎被忽略以支持 start-method

标签 java applet awt repaint

我正在构建棋盘游戏的小程序,处理用户输入的过程大致如下所示:

public void mousePressed(MouseEvent event) {
    int row = event.getX() / (getSize().width / 8) ;
    int column = event.getY() / (getSize().height / 8) ;
    if(possibleMove(column, row) {
        makeMove(column,row,whosTurn); 
        repaint();
        start();
    }
}

在人工输入后,计算机选择一个 Action 并像此方法一样调用 repaint() 和 start()。
但是屏幕似乎只有在计算机移动后才会更新,所以在调用 start() 之后。这怎么会发生,因为 repaint() 在 start() 之前被调用了?

我怀疑这可能是因为 repaint() 启动了一个新线程(是吗?),但它为什么要等待 start()?

当然,如果需要,我可以提供更多代码。

最佳答案

repaint() 调用不会执行重绘 - 它会安排完成重绘。在任何当前和已经安排的事件完成后,事件线程稍后会执行实际的重绘(由于其他与此处无关的原因,它可能会发生得更晚)。 start() 方法在调度完成后立即被调用,作为响应当前事件的一部分。所以是的,实际绘制总是在调用 start() 之后进行。

参见 the description of repaint()the description of the paint mechanism了解更多详情。

通常像这样调用 start() 可能是不好的。调用 start() 时,UI 无法响应任何内容(例如调整游戏窗口大小或未覆盖),除非 start() 是一个非常短的操作,否则这将导致 UI 看起来没有响应。

关于java - 在 Java、AWT 中,repaint-method 似乎被忽略以支持 start-method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5566994/

相关文章:

java - 这个正则表达式有什么作用?

c# - 多程序员编程 IDE 或插件

java - Applet java 中按钮有位置吗?

java - 使用哪种 Javax.awt 布局?

java - 为 Java 应用程序创建启动屏幕的最佳方法?

java - 如何使用 Chronicle Map 在随机索引上使用 get/set 序列化/反序列化 long[] 值?

java - 小程序运行时按钮和滚动条不响应

java.util.PropertyPermission user.home 读取(拒绝访问)

java - ajax/processing java applet - 如何动态地将 applet 添加到页面

java - 我的答案在第一次输入后总是返回错误并且不会跟踪分数?