【问题标题】:Java - how to draw GraphicsJava - 如何绘制图形
【发布时间】:2011-09-01 17:07:17
【问题描述】:

我试着环顾四周,但无法理解如何在 java 中绘制图形。让我举个例子。

假设我想创建一个自定义方法来填充三角形,它需要三个点作为参数。如果无法创建 Graphics 对象,如何使用方法 fillPolygon(int[] xPoints, int[] yPoints, int nPoints)?

【问题讨论】:

标签: java graphics methods drawing abstract


【解决方案1】:

首先你应该明白(也许你已经知道了)Graphics 是你写的地方,而不是你写信的地方。大部分时间是你的电脑屏幕,比如你使用 Swing 的时候。

你也可以直接写到从BufferedImage.getGraphics获取的Graphics中来绘制空图:

Image myImage = new BufferedImage(...);
Graphics graphImage = myImage.getGraphics();
graphImage.setColor(Color.BLUE);
graphImage.fillPolygon(...);  // set some blue pixels inside the BufferedImage

然后您可以将该图像转换为任何图像格式。

现在是一个愚蠢的例子,你不应该这样做(见下文真正的 Swing 程序): 您可以在 Swing 组件中绘制图像

public class MyJPanel extends Panel {

   @Override
   public void paintComponent(Graphics g) { // g is your screen
       ... 
       g.drawImage(myImage,...);  // draw your image to the screen
       ...
   }
}

标准的 Swing 程序是直接写入屏幕:

public class MyJPanel extends Panel {

   @Override
   public void paintComponent(Graphics g) { // g is your screen
       ... 
       g.fillPolygon(...); // directly writes your pixels to the screen buffer
       ...
   }
}

(挑剔者的评论:由于 Swing 是双缓冲的,因此直接写入屏幕缓冲区并不完全正确。)

【讨论】:

【解决方案2】:

你需要一个可以在上面画画的表面。通常,这可以通过创建您自己的组件(通过扩展,例如摇摆中的JPanel)然后覆盖那里的各种绘图更新方法来完成。要实现的主要相关的是paintComponent,它获取作为参数传入的Graphics对象。

您通常还可以将 Graphics 对象转换为 Graphics2D,这为您提供了更丰富的绘图原语集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2011-04-14
    • 2011-12-12
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多