Java 关于paintComponent与paint有什么区别?各自的特征


重点:

1 - paint() 中调用 paintComponent(), paintBorder(), paintChildren()

2 - 最重要的区别是“双缓冲”。Swing 组件的 paint() 中实现了双缓冲,所以不要随便去覆写,会破坏双缓冲的,————建议的方式是覆写 paintComponent(),很多人做的小程序会”闪烁“,就是因为他们覆写了 paint() 方法,破坏了Swing本身的双缓冲。Swing 不建议用户自己实现双缓冲。

3 - 覆写 paint(),如果新方法没有去调用 paintChildren(),还会造成子控件不显示,鼠标移上去才显示,这个也是很多新手问的问题: “为什么我的按钮只有鼠标移上去才显示?”

4 - 只有极少数的情况可能需要覆写 paint() 方法,通常是为了实现特殊的绘图效果,或者特殊的优化,比如 JViewport 覆写了 paint() 方法,使用“延迟重绘”的方式来合并当滚动条移动时一些特别频繁的重绘请求,等等。

5 - paint方法定义于Component类 awt画布就可以自己重写paint方法,达到自己的目的 paintComponent定义于JComponent类 JComponent类继承了Component类,JPanel类继承了JComponent类 所以在JPanel既有paint方法,又有paintComponent方法 但是paint方法被java开发程序员重写了,进行着大量的复杂工作,如图象缓冲,解决了awt画布的抖动等问题,所以这个方法是不能被重写的,否则你的程序没办法正常工作 于是java开发程序员写了paintComponent方法替代paint方法,让我们完成自己需要的工作,其作用相当于awt的paint方法,作用完全一样 这2个方法都不允许自己调用,程序需要时,方法会自动调用 你要自己强制重画,需要调用repaint()方法

简单说,你用awt画布就用paint方法 你用Swing的JPanel就用paintComponent方法(Swing没有画布)

------解决方案--------------------
之间我看过一个人写的关于这个的文章,写的应该挺全的,可惜找不到地址了。。
这两个方法,
paint()是基础,paint中会调用 paintComponent(), paintBorder(), paintChildren()
这三个方法,
这三个方法一个是绘制背景,一个绘制边框,一个绘制子控件。
一般重写背景,是建议重写paintComponent()的。
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java中的paintComponent是一个方法,用于在Swing组件中绘制图形。它是JComponent类的一个方法,可以在子类中重写。在重写paintComponent方法时,可以使用Java的绘图API来绘制图形,如绘制线条、矩形、圆形、文本等。这个方法在组件需要重新绘制时自动调用,例如当组件被添加到容器中、容器大小改变或者组件需要更新时。重写paintComponent方法可以让我们自定义组件的外观和行为,实现更加灵活的界面设计。 ### 回答2: Java中的paintcomponent()方法是绘制组件的的核心方法之一,是在继承JComponent(或其子类)类中使用的。它被用于在屏幕上为组件绘制图像或其他图形。 当一个组件在屏幕上完全或部分可见时,paintcomponent()方法就会被调用。当需要更新组件的外观或大小等属性时,也会触发它的调用。 在继承JComponent类的时候,必须要重写这个方法来实现具体的绘画逻辑。在paintcomponent()中,可以使用Graphics类的实例来绘制任何形状,包括线条、矩形、多边形、弧形、文字和图像等等。 Javapaintcomponent()方法提供了灵活的绘图接口,可以实现各种视觉效果。在实现线框图形时,可以使用drawline()和drawrect()等方法来创建绘制方式简单的线条和矩形;而在绘制复杂图形时,则需要考虑实现Graphics2D类中的方法。 此外,paintcomponent()方法也支持设置颜色、字体、渐变、阴影和图案等绘图元素,从而创建更为丰富的绘图效果。 总之,paintcomponent()方法在Java的GUI编程中扮演着非常重要的角色,开发者们可以根据具体的需求来实现它以获得所需的视觉效果。 ### 回答3: JavapaintComponent()方法是一个可重写的方法,它位于java.awt.Component中,可用于绘制图形和其他自定义组件。在使用Swing组件创建GUI时,可以使用该方法自定义GUI组件的外观。 使用paintComponent()时,必须绘制图形或其他自定义组件。通常情况下,使用Graphics对象来绘制组件。因为Graphics对象是可变对象,因此必须谨慎使用。 在调用paintComponent()方法之前,必须调用super.paintComponent()方法,以确保重绘之前的所有图形都被清除。 paintComponent()方法可以使用不同类型的Graphics对象进行绘制,包括Graphics、Graphics2D和GraphicsEnvironment。Graphics是一个抽象类,它包含了绘制图形所需的方法和属性。Graphics2D是Graphics的子类,它提供了更多的绘制选项和更高级的绘图能力。GraphicsEnvironment类提供了访问底层图形设备的方法。 绘制图形时,可以使用几何形状、文本、图像和颜色等元素,这些元素可以通过Graphics对象中的各种方法进行设置和修改。一些常用的绘制方法包括drawLine()、drawRect()、drawOval()、drawString()、drawImage()和setColor()等。 绘制完成后,程序还可以调用repaint()方法,以便在需要时重新绘制组件。 总之,paintComponent()是Java编程中常用的方法之一,可以用于自定义GUI组件的外观,并且具有很高的灵活性和可定制性。但是,在使用它时,必须了解绘图基础和使用Graphics对象进行绘图的详细信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值