【问题标题】:Graphics2D does PostModernGraphics2D 做 PostModern
【发布时间】:2013-05-14 05:42:15
【问题描述】:

在以下代码中,将fill 更改为draw 会产生意外结果。所附图片展示了draw红色和绿色矩形所引起的不受欢迎但非常受欢迎的后现代效果。

仿射变换不应该是问题的一部分,但正如福尔摩斯所说,一旦你排除了所有其他可能性......所以,我将解释变换。我解决了一堆方程,以弄清楚如何使窗口显示笛卡尔坐标系,左下角为(-2, -2),右上角为(+2, +2)

这是一个独立的示例。尝试将任何 draws 更改为 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);
  }
}

【问题讨论】:

  • 还有..你的问题是什么?
  • @AndrewThompson 我认为filldraw 应该产生相同的矩形...?
  • @randomstring ,Fill 和 Draw 是不同的,Fill 会为整个矩形着色,而 Draw 只是用颜色勾勒矩形
  • @CRazyProgrammer 是的,笔画宽度被疯狂放大了!
  • 为了帮助沮丧的读者产生共鸣,这是在经过长时间的努力后才发生的,以正确地将绘图区域缩放到从 -1 到 +1 的数学坐标系,原点位于左下方。在弄清楚缩放比例时,我接受了使用填充而不是绘制的人的帮助(没有解释为什么他们编辑我的代码以使用填充而不是绘制)。在我翻转绘制填充之前,我无法在我的代码中重新创建他们的解决方案,然后出现了这个问题。我不得不说今天是 java swing 和图形的 wtf 日。

标签: java swing graphics graphics2d


【解决方案1】:

这是 1 个单位的默认笔画设置。我将每个维度的坐标空间从-20 增加到+20,并绘制了10 单位宽和高的矩形,这证实了下图所示的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多