gpt4 book ai didi

java - 画笔型 GUI 中的 paintComponent() 与 paint() 和 JPanel 与 Canvas

转载 作者:太空狗 更新时间:2023-10-29 22:49:43 25 4
gpt4 key购买 nike

我从this得到了一些有趣的想法和批评, thisthis发布(有关 GUI 的代码,请参阅上一篇文章)。尽管如此,我仍然对某些事情感到困惑。主要是,显示用户介绍图形的成本最低的方法是什么?

更具体地说,我通过在 MouseDragged() 方法中创建此类的对象,使用了 JPanel 类中的 paintComponent() 方法连同 paintComponent(getGraphics()) 方法(AuxClass2AuxClass1 相应地)。

显然,使用 getGraphics()paintComponent() 而不是 repaint() 是个坏主意,我怀疑与内存有关利用。每次用户拖动鼠标时调用 AuxClass2 也是一个坏主意。

此外,JPanel 与 Canvas(即 swing 与 awt)有点令人困惑。什么时候使用?

我一直在尝试寻找解决方法,但一直没有找到,尤其是对于 getGraphics() 方法:还可以如何将图形添加到面板?

最佳答案

重与轻

基本上来说,一个重量级组件链接到它自己的原生对等体,而轻量级组件共享一个共同的原生对等体。

一般来说,混合重量级和重量级组件不是一个好主意,因为 z 顺序存在问题,而且根据我的经验(尽管现在应该更好)可能会出现绘画问题。

这就是不鼓励您使用 Canvas 的原因类,可能是因为您试图将它放在轻量级组件上......我想

控制的错觉

Swing API 新手面临的最大问题之一是你对绘画过程有某种控制的错觉,你没有。接受它更容易。

您能做的最好的事情就是请求重绘管理器在方便的时候尽早执行更新。

另外,调用 getGraphics不保证返回非空值。

事物的正确顺序

paint对比paintComponent

这里的问题是paint做一些重要的工作,调用paintComponent只是其中之一。

在 Swing 中,我们非常鼓励使用 paintComponent每当我们想要执行自定义绘制时,这通常是组件的最低级别,并且在绘制子组件之前被调用。

如果您覆盖 paint然后在 Graphics 上作画在调用 super.paint 后你最终会在所有东西之上绘画,这并不总是你想要的结果

即使是这样,子组件也可以独立于其父容器进行绘制,使绘制“覆盖”您可能添加的任何绘制效果

有用的链接

离别思念

只有真正添加到组件中的组件,附加到本地对等体的组件才会存在 paint调用的方法。因此,尝试绘制尚未添加到容器中的组件是毫无意义的......

关于java - 画笔型 GUI 中的 paintComponent() 与 paint() 和 JPanel 与 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12175174/

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