我想访问Graphics类来绘制一个矩形,但是想要这样做而不必调用paintComponent方法。有可能吗?
答案 0 :(得分:3)
绘画应始终以绘画方法完成。
最常见的方法是在组件的paintComponent(...)
方法中进行自定义绘制。
另一种方法是"装饰"使用JLayer
类的组件,并在JLayer的paint(...)
方法中实现绘制。阅读Decorating Components Using the JLayer Class上Swing教程中的部分,了解更多信息和示例。
答案 1 :(得分:3)
是的,有可能,就像在BufferedImage
中绘制一样(通过调用Graphics
方法直接使用getGraphics()
对象)。
但,与BufferedImage
的情况不同,对组件这样做可能会导致混乱。原因是底层的AWT / Swing代码期望组件自己绘制(参见Component.paint
或JComponent.paintComponent
),而它(底层的AWT / Swing代码)将关注渲染需要发生(例如滚动,调整大小等)。
因此,如果你从组件外部进行绘画,那么在任何时候AWT / Swing决定"那么,有一些新的绘画/重新绘制要做,"它会调用& #34;标准方法",期望您的绘图代码在那里。
当您在外部绘制时,如果您没有做出特殊安排以通知"需要重新粉刷"情况,部分或整个"从外面抽取"将被涂上或不涂上所有或各种不同的混乱情况。
换句话说,如果你从外面画画,你不仅需要写作画作的代码,还要写:
请放心,您不想(即使您认为这样做)。
PS。如果您更好地描述了为什么需要这样做,那么您可能会以正确的方式获得更多有用的建议。