java - 在 PaintComponent() 之外绘制形状 (java)

标签 java graphics

我对 Java 图形很陌生,很难掌握从一种方法(paintComponent ())绘制所有图形的整个概念。我只是好奇我们是否可以在 PaintComponent 之外绘制图形。这可能吗?是否可以在 main 方法中写一行: 填充矩形(100,100, 500,400); 并让它画一个矩形? 如果可以的话,按照Java是约定俗成的吗?

基本上,我问是否可以在paintComponent类之外绘制图形,并且它是否是常规的。

最佳答案

您可以绘制到BufferedImage,但如果您希望将其绘制在屏幕上,那么通常您需要使用paintComponent。您可以将传入 paintComponentGraphics 实例传递给可以执行更复杂操作的其他类,但您永远不应该维护该实例的引用或尝试在绘制周期上下文之外进行绘制。

参见Painting in AWT and SwingPerforming Custom Painting了解更多详情

如果您需要对绘制过程进行更多控制,您还可以使用BufferStrategy

参见BufferStrategy and BufferCapabilities了解更多详情

你应该知道的事情:

  • Swing 使用“被动渲染”方法,这意味着当绘制系统决定需要完成绘制时,就会发生绘制。这就是为什么您必须在绘制周期的上下文中执行绘制(即在 paintComponent 方法中)
  • BufferStrategy 使用“主动渲染”方法,使您可以完全控制绘制过程,但它无法绘制 Swing 组件

关于java - 在 PaintComponent() 之外绘制形状 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55192386/

相关文章:

java - 绘图/使用 100 万个节点

java - Android Studio TextView.text 不更新

android - 如何在Android布局中动态画一条线

ios - 椭圆绘制算法中的二维变换

delphi - 当我使用 & 符号时,如何在 GDI+ Graphics.DrawString 中绘制支持下划线字符的字符串?

Java j2ee JSTL无法打印对象列表

java - 需要更新点并将它们向西移动

java - 访问其他包中的 protected 方法?

java - 当红色矩形与青色矩形碰撞时如何将其移除?

linux - 通过 mesa 在旧硬件上运行 OpenGL 程序