在以下代码中,将 fill
更改为 draw
会产生意外结果。附图展示了绘制
红色和绿色矩形所造成的不受欢迎但备受赞赏的后现代效果。
仿射变换不应该是问题的一部分,但正如福尔摩斯所说,一旦你排除了所有其他可能性......所以,我将解释变换。我解决了一堆方程,以弄清楚如何使窗口显示笛卡尔坐标系,左下角带有 (-2, -2)
和 (+2, +2)
位于右上角。
这是一个独立的示例。尝试将任何draw
更改为fill
,反之亦然,以实现您自己的自定义艺术,您可以在Oracle办公室中将其框起来。
我使用的是 Java SE 7、JDK 1.7.0_21!
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class G {
public static void main (String [] args) {
JFrame frame = new JFrame(G.class.getCanonicalName());
JComponent component = new JComponent() {
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent (Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
AffineTransform xform = new AffineTransform(getWidth() / 4, 0, 0, - getHeight() / 4, getWidth() / 2, getHeight() / 2);
g2.setTransform(xform);
paint2D(g2);
g2.dispose();
}
protected void paint2D (Graphics2D g2) {
g2.setColor(Color.RED);
g2.draw(new Rectangle2D.Double( 0, 0, 1, 1));
g2.setColor(Color.GREEN);
g2.draw(new Rectangle2D.Double(-1, -1, 1, 1));
g2.setColor(Color.BLUE);
g2.fill(new Rectangle2D.Double(-1, 0, 1, 1));
g2.setColor(Color.YELLOW);
g2.fill(new Rectangle2D.Double( 0, -1, 1, 1));
}
};
frame.setLayout(new BorderLayout());
frame.add(component, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setVisible(true);
}
}
最佳答案
这是 1 单位的默认笔划设置。我将每个维度的坐标空间从 -20
增加到 +20
并绘制了 10
单位宽和高的矩形,这确认了问题与图像相同下面显示。
关于java - Graphics2D 是后现代的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16535904/