我想访问Graphics类来绘制一个矩形,但是想要这样做,而不必调用paintComponent方法。可能吗?用没有paintComponent的Graphics可以绘制Java吗?
-2
A
回答
3
绘画应始终以绘画方式完成。
最常见的方法是在组件的paintComponent(...)
方法中执行自定义绘画。
另一种方法是使用JLayer
类“装饰”组件,并在JLayer的paint(...)
方法中实施绘画。请阅读Decorating Components Using the JLayer Class上的Swing教程部分以获取更多信息和示例。
3
是的,可以用相同的方式绘制BufferedImage
(通过调用getGraphics()
方法直接使用Graphics
对象)。
但是,与BufferedImage
的情况不同,对于组件这样做可能会造成混乱。原因是底层AWT/Swing代码期望组件自己绘制(参见Component.paint
或JComponent.paintComponent
),而当此渲染需要发生时,它(底层的AWT/Swing代码)将会处理大约(例如滚动,调整大小等)。因此,如果你从组件的外部绘画,AWT/Swing在任何时候都决定“好吧,有一些新的绘画/重绘要完成”,它会调用“标准方法”,期望你绘图代码在那里。
当你在外部画画时,如果你没有特别的安排来通知“需要重新绘画”的情况,部分或整个“从外部画”将被涂上或不涂上所有或全部有种不同的凌乱情况。
换句话说,如果你画外之外,你需要编写不仅不画中的代码,也:
- 的代码重新实现堆已被执行AWT/Swing,它处理组件需要(重新)绘制的情况。
- 以某种方式禁用AWT/Swing“原生”处理绘画。
请放心,你不想那(即使你认为你这样做)。
PS。如果你更好地描述为什么你需要这样做,你可能会得到更多有用的建议,以便如何正确地做到这一点。
相关问题
- 1. 您可以使用Core Graphics绘制文字阴影/轮廓吗?
- 2. protected void paintComponent(Graphics g)
- 3. repaint()的绘制速度比paintComponent()慢吗?
- 4. 用Core Graphics绘制UIImage?
- 5. public void paintComponent(Graphics g)not working
- 6. Java重绘()不调用paintComponent()绘制图像
- 7. 如何在paintComponent外绘制?
- 8. Java的:没有的paintComponent被称为
- 9. paintComponent之后的Java Swing绘制图像调用
- 10. paintComponent不可见java
- 11. 使用PaintComponent在面板外绘制
- 12. 用paintComponent()和继承绘制“图层”
- 13. 使用paintComponent()绘制多个图像
- 14. 使用Core Graphics进行雾绘制
- 15. 使用Core Graphics绘制UIPageControl指标?
- 16. 使用Core Graphics绘制“转轮”?
- 17. 将抽象Graphics对象传递给paintComponent()
- 18. 重绘不调用的paintComponent
- 19. 有没有可以帮助绘制元胞自动机图形的Java库?
- 20. Can Dojox可以绘制XY图吗?
- 21. 可可:NSView没有绘制矩形
- 22. 我可以在重写的paint(Graphics)中调用getGraphics()吗?
- 23. paintComponent重写在面板上绘制
- 24. iPhone通过图形绘制Core Graphics
- 25. 为什么Graphics :: DrawString绘制misc字符?
- 26. 有人可以解释iTexts画布的绘制顺序吗?
- 27. 的paintComponent()我当调用的paintComponent通过重绘由代码内重绘
- 28. 我可以在setContentView调用后强制绘制吗?
- 29. Highcharts:是否可以绘制没有数据值的sunburst图表?
- 30. paintComponent()在重绘后留下先前绘制的图像()
您的问题实际上可能是一个[XY问题](http://mywiki.wooledge.org/XyProblem),当您最好的解决方案是完全使用不同的方法时,您会问“如何解决此代码问题” 。考虑告诉我们你想要解决的总体问题,而不是你目前如何解决问题。例如,*为什么*你想避免使用paintComponent?你有什么尝试?什么不工作? –
例如,是的,可以通过调用getGraphics()来绘制一个组件的Graphics上下文对象,然后使用该对象进行绘制,但这样做可能会产生不稳定的图像并抛出NullPointerExceptions,因为以这种方式获取的Graphics对象不是耐用。 –
此外,一个不调用paintComponent()方法,对吧? –