为了账号安全,请及时绑定邮箱和手机立即绑定

paintComponent是如何工作的?

paintComponent是如何工作的?

白猪掌柜的 2019-08-08 17:02:11
paintComponent是如何工作的?这可能是一个非常无聊的问题。我刚刚开始学习Java我不明白paintComponent方法的操作。我知道如果我想画一些东西,我必须覆盖paintComponent方法。public void paintComponent(Graphics g){    ...}但它何时被称为?我从来没有看到像“object.paintComponent(g)”这样的东西,但它仍然是在程序运行时绘制的。什么是Graphics参数?这个从哪里来?调用方法时必须提供参数。但正如我之前所说,似乎永远不会明确地调用此方法。那么谁提供这个参数呢?为什么我们必须将其转换为Graphics2D?public void paintComponent(Graphics g){     ...     Graphics2D g2= (Graphics2D) g;     ...}
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

对你的问题的(非常)简短回答paintComponent是“当它需要时”。有时将Java Swing GUI系统视为“黑盒子”更容易,其中许多内部构件在没有太多可见性的情况下处理。

有许多因素决定了何时需要重新绘制一个组件,包括移动,重新调整大小,改变焦点,被其他框架隐藏,等等。其中许多事件都是自动神奇地检测到的,并且paintComponent在确定需要进行该操作时在内部调用。

我和Swing一起工作了很多年,我认为我没有paintComponent直接打过电话,甚至没有直接打过电话。我最接近的是使用repaint()方法以编程方式触发某些组件的重绘(我假设调用paintComponent下游的正确方法)。

根据我的经验,paintComponent很少直接覆盖。我承认有些自定义渲染任务需要这样的粒度,但Java Swing确实提供了一套(相当)强大的JComponents和Layouts,可用于完成大部分繁重工作而无需直接覆盖paintComponent。我想我的观点是确保在您尝试滚动自己的自定义渲染组件之前,您无法对本机JComponents和Layouts执行某些操作。


查看完整回答
反对 回复 2019-08-08
?
万千封印

TA贡献1891条经验 获得超3个赞

调用object.paintComponent(g)是一个错误。

而是在创建面板时自动调用此方法。该paintComponent()方法也可以通过类中repaint()定义的方法显式调用Component

调用的效果repaint()是Swing自动清除面板上的图形并执行该paintComponent方法以重绘该面板上的图形。


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 2168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信