为什么我不能用fillPolygon()绘制一个矩形

时间:2017-04-15 15:53:02

标签: java swing graphics awt

我正在学习Java图形。我想绘制简单的数字。但是我注意到以下代码无法正确绘制:

public class Draw extends JPanel {

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int[] xpoints = new int[] { 20, 50, 80 };
        int[] ypoints = new int[] { 40, 10, 40 };

        g.fillPolygon(xpoints, ypoints, 3);

        int[] recXp = new int[] { 20, 80, 20, 80 };
        int[] recYp = new int[] { 50, 60, 50, 60 };

        g.fillPolygon(recXp, recYp, 4);

    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        Draw panel = new Draw();
        frame.add(panel);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);

    }
}

为了达到我想要的目的,我必须使用

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Draw extends JPanel {

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int[] xpoints = new int[] { 20, 50, 80 };
        int[] ypoints = new int[] { 40, 10, 40 };

        g.fillPolygon(xpoints, ypoints, 3);

        g.fillRect(20, 50, 60, 10);

    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        Draw panel = new Draw();
        frame.add(panel);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);

    }
}

为什么会这样?我错过了什么吗?对不起,如果这是一个微不足道的问题,我只是想更好地理解Java。

1 个答案:

答案 0 :(得分:2)

    int[] recXp = new int[] { 20, 80, 20, 80 };
    int[] recYp = new int[] { 50, 60, 50, 60 };

你只有两套积分。

您需要4组不同的点。一个用于矩形的每个角落。

类似的东西:

  1. 上/下(20,50)
  2. top / right(x与上面不同,y相同)
  3. 下/右(x与上述相同,y不同。
  4. bottom / left(x与第一个相同,y保存如上)