是否可以在没有paintComponent的情况下使用Java绘制图形?

时间:2016-10-01 00:14:43

标签: java swing graphics paintcomponent graphics2d

我想访问Graphics类来绘制一个矩形,但是想要这样做而不必调用paintComponent方法。有可能吗?

2 个答案:

答案 0 :(得分:3)

绘画应始终以绘画方法完成。

最常见的方法是在组件的paintComponent(...)方法中进行自定义绘制。

另一种方法是"装饰"使用JLayer类的组件,并在JLayer的paint(...)方法中实现绘制。阅读Decorating Components Using the JLayer Class上Swing教程中的部分,了解更多信息和示例。

答案 1 :(得分:3)

是的,有可能,就像在BufferedImage中绘制一样(通过调用Graphics方法直接使用getGraphics()对象)。

,与BufferedImage的情况不同,对组件这样做可能会导致混乱。原因是底层的AWT / Swing代码期望组件自己绘制(参见Component.paintJComponent.paintComponent),而它(底层的AWT / Swing代码)将关注渲染需要发生(例如滚动,调整大小等)。

因此,如果你从组件外部进行绘画,那么在任何时候AWT / Swing决定"那么,有一些新的绘画/重新绘制要做,"它会调用& #34;标准方法",期望您的绘图代码在那里。
当您在外部绘制时,如果您没有做出特殊安排以通知"需要重新粉刷"情况,部分或整个"从外面抽取"将被涂上或不涂上所有或各种不同的混乱情况。

换句话说,如果你从外面画画,你不仅需要写作画作的代码,还要写:

  1. 重新实现AWT / Swing已经实现的大量代码,用于处理组件需要(重新)绘制的情况。
  2. 以某种方式禁用AWT / Swing" native"处理绘画。
  3. 请放心,您不想(即使您认为这样做)。

    PS。如果您更好地描述了为什么需要这样做,那么您可能会以正确的方式获得更多有用的建议。