gpt4 book ai didi

java - 油漆组件是如何工作的?

转载 作者:IT老高 更新时间:2023-10-28 20:22:58 25 4
gpt4 key购买 nike

这可能是一个非常菜鸟的问题。我刚开始学习Java

不明白paintComponent方法的操作。我知道如果我想画一些东西,我必须重写paintComponent方法。

public void paintComponent(Graphics g)
{
...
}

但是什么时候调用呢?我从来没有见过像“object.paintComponent(g)”这样的东西,但它仍然是在程序运行时绘制的。

什么是 Graphics 参数?这个从哪里来?调用方法时必须提供参数。但正如我之前所说,似乎从未显式调用此方法。那么这个参数是谁提供的呢?为什么我们必须将其转换为 Graphics2D?

public void paintComponent(Graphics g)
{
...
Graphics2D g2= (Graphics2D) g;
...
}

最佳答案

对您的问题的(非常)简短的回答是 paintComponent 被称为“当它需要时”。有时更容易将 Java Swing GUI 系统视为一个“黑匣子”,其中大部分内部结构都在没有太多可见性的情况下处理。

决定何时需要重新绘制组件的因素有很多,包括移动、调整大小、更改焦点、被其他框架隐藏等等。其中许多事件是自动检测到的,当确定需要该操作时,会在内部调用 paintComponent

我已经使用 Swing 多年了,我认为我没有曾经直接调用过 paintComponent,甚至没有看到它直接从其他东西调用过.我最接近的是使用 repaint() 方法以编程方式触发某些组件的重绘(我假设它在下游调用了正确的 paintComponent 方法。

根据我的经验,paintComponent 很少被直接覆盖。我承认有些自定义渲染任务需要这种粒度,但 Java Swing 确实提供了一组(相当)健壮的 JComponents 和 Layouts,可以用来完成大部分繁重的工作,而无需直接覆盖 paintComponent。我想我的意思是在你尝试推出你自己的自定义渲染组件之前,确保你不能用原生 JComponents 和 Layouts 做一些事情。

关于java - 油漆组件是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15544549/

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