java - 无 arg 的 repaint() 是否比带 args 的 repaint() 更好?
问题描述
我想在 a 上画一些东西,JPanel
然后阅读并练习表演自定义绘画课程。当谈到使用repaint
我觉得更新广场时,使用这个结构
private void moveSquare(int x, int y) {
if ((squareX != x) || (squareY != y)) {
squareX = x;
squareY = y;
repaint();
}
}
与这个推荐的例子相比,为这个特定的例子提供了更好的油漆性能
private void moveSquare(int x, int y) {
int OFFSET = 1;
if ((squareX != x) || (squareY != y)) {
repaint(squareX, squareY, squareW + OFFSET, squareH + OFFSET);
squareX = x;
squareY = y;
repaint(squareX, squareY, squareW + OFFSET, squareH + OFFSET);
}
}
如果我使用后者,则在拖动过程中,正方形看起来有点“压扁”。
我知道,这是一个非常基本的示例,但总体上它使 Java 图形性能有些害怕。
解决方案
进行两次重绘是不自然的。
而何时只重绘新旧广场的结合?
private void moveSquare(int x, int y) {
if (squareX != x || squareY != y) {
final int OFFSET = 1;
int minx = Math.min(x, squareX);
int miny = Math.min(y, squareY);
int dx = Math.abs(x - squareX);
int dy = Math.abs(y - squareY);
squareX = x;
squareY = y;
repaint(minx, miny, squareW + dx + OFFSET, squareH + dy + OFFSET);
}
}
当正方形相对较小或超出显示区域(剪裁)时,这应该更平滑。
推荐阅读
- go - 如果您不能为函数指针赋值,那么 Go 中的函数指针有什么用?
- mongodb - 语法缺失;在mongoexport中声明之前
- swift - 如何从另一个 ViewController 更改标签颜色?迅速
- jquery - 每次无法验证单个选项卡
- java - 完整设置后运行方法
- kentico-kontent - `published` / `unpublished` webhook 在内容可用之前发送
- javascript - Fastify JSON Schema 默认值 `null`
- javascript - 如何组合这些正则表达式
- angular - Angular:收集的元数据包含将在运行时报告的错误:不支持 Lambda
- wordpress - .htaccess 无法解决 CORS 策略