gpt4 book ai didi

java - 理解 Swing 和 repaint()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:18 25 4
gpt4 key购买 nike

我想了解如何使用 Swing 进行绘画。为此,我一直在阅读 Oracle 教程:http://docs.oracle.com/javase/tutorial/uiswing/painting/step3.html

我的问题很简单:为什么对同一函数(重绘)的两次调用有不同的行为?怎么会出现UI Delegate在之前绘制的矩形上绘制了背景,却在新的区域上绘制了一个新的矩形呢?我没有在 paintComponent() 上看到任何特别的原因。

我也读过http://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html试图了解情况。似乎与组件的不透明属性有某种联系。在我们创建一个新的矩形之后,这个属性是否会改变,使其为真(因此,如前所述,ui.update() 会将其设置为背景色)。为什么 paintComponent() 没有在那里绘制一个新的矩形?

最佳答案

使用不同的参数调用函数:

repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
squareX=x;
squareY=y;
repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);

在第一次调用 repaint() 时,squareX 和 squareY 表示先前绘制对象的位置。在第二个调用中,squareX 和 squareY 更改为当前鼠标位置。

来自 JComponent关于 repaint() 的 API 文档:

Adds the specified region to the dirty region list if the component is showing. The component will be repainted after all of the currently pending events have been dispatched.

即,第一次调用 repaint() 将之前的位置标记为脏,第二次调用将当前位置标记为脏。当事件(moveSquare)完成后,重新执行paintComponent,更新这两个区域。红色矩形仅放置在新位置,旧位置更新为“空”。

关于java - 理解 Swing 和 repaint(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13310707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com