【问题标题】: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,这为您提供了更丰富的绘图原语集。