首页 > 解决方案 > 如何绘制多边形,然后按比例调整大小并将其移动到显示区域的中心?

问题描述

我在 Graphics2d 和 Polygon 上做作业,但是我无法搜索(或者可能使用错误的关键字?)我的作业解决方案。

作业题截图:

图像

下面的代码是我尝试过的第一种方法,我只看到空屏幕。在谷歌上搜索后,我意识到我的 .scale 和 .translate 用法错误,所以我将它移动到 .drawPolygon 之前,这次我可以看到多边形,但它是在我放大窗口之后,这意味着它不是300内可见,300最初?

import javax.swing.*;
public class PolygonExample extends JFrame{
    public PolygonExample(){
        super("Drawing Red Polygon");
        setSize(300, 300);
        setVisible (true);
    }
    public void paint (Graphics g){
        super.paint(g);
        int xValue[] = {0, 10, 7, -7, -10};
        int yValue[] = {-10, -2, 10, 10, -2};
        Polygon polygon = new Polygon(xValue, yValue, 5);
        g.setColor(Color.RED);
        g.drawPolygon(polygon);

        Graphics2D g2d = (Graphics2D) g;
        g2d.scale(5.0, 5.0);
        g2d.translate(150, 150);
    }
    public static void main(String[] args) {
        new PolygonExample();
    }
}

我希望多边形会绘制在显示区域的中心(300x300 以内),但我在屏幕上什么也没看到。放大窗口后,我可以看到我的多边形,但它不在我设置的 300、300 区域内

标签: javagraphicspolygongraphics2d

解决方案


import javax.swing.*;
import java.awt.geom.AffineTransform;
public class PolygonExample extends JFrame{
    public PolygonExample(){
        super("Drawing Red Polygon");
        setSize(300, 300);
        setVisible (true);
    }
    public void paint (Graphics g){
        super.paint(g);
        int xValue[] = {0, 10, 7, -7, -10};
        int yValue[] = {-10, -2, 10, 10, -2};
        Polygon polygon = new Polygon(xValue, yValue, 5);

        g.setColor(Color.RED);
        Graphics2D g2d = (Graphics2D) g;
        AffineTransform at = new AffineTransform(5., 0., 0., 5., 150., 150.);
        g2d.setTransform(at);

        g.drawPolygon(polygon);     
    }
    public static void main(String[] args) {
        new PolygonExample();
    }
}

上面的代码完成了我想做的事情

感谢@MadProgrammer 的资源


推荐阅读