簡體   English   中英

如何在Java中放大/移動多邊形?

[英]How to enlarge/move polygon in Java?

所以我有以下代碼:

import java.awt.*;

public class Triangle extends Point {
    protected int size;
    private int p1x, p2x, p3x, p1y, p2y, p3y;

    //Create a new triangle
    public Triangle()
    {
        super();
        size = 100;
        yPos = 100;
    }


    public void reSize(int newSize) {
        size = size + newSize;
    }

    //Draw the triangle with current specifications on screen.
    public void display(Graphics g) {
        p1x = (size / 3);
        p2x = (size / 2);
        p3x = ((2 * size) / 3);
        p1y = ((2 * size) / 3);
        p2y = (size / 3);
        p3y = ((2 * size) / 3);
        int[] xPoints = { p1x, p2x, p3x };
        int[] yPoints = { p1y, p2y, p3y };
        int npoints = 3;
        g.fillPolygon(xPoints, yPoints, npoints);
    }
}

下面的代碼用於放大/縮小三角形:

    if (e.getSource() == makeBigger) {
          aShape.reSize(20);
    }

    else if (e.getSource() == makeSmaller) {
          aShape.reSize(-20);
    }

問題是,我還希望能夠使用以下代碼將其拖動:

    this.addMouseListener(new MouseAdapter() {
    public void mouseReleased(MouseEvent me) {
        shapeColor = Color.black;
        repaint();
    }

    public void mouseDragged(MouseEvent me) {
        shapeColor = Color.lightGray;
        aShape.moveXY(me.getX(), me.getY());
        repaint();
    }
});

    this.addMouseMotionListener(new MouseAdapter() {
    public void mouseReleased(MouseEvent me) {
        shapeColor = Color.black;
        repaint();
    }

    public void mouseDragged(MouseEvent me) {
        shapeColor = Color.lightGray;
        aShape.moveXY(me.getX(), me.getY());
        repaint();
    }
});

我看到的唯一方法是我可以擁有一個或另一個。 如何將其組合在一起才能同時具有這兩個功能? 目前,它可以完美地調整大小,但是說我將x / y坐標中的變量大小更改為yPos / xPos,就可以拖動三角形但不能對其進行整形。

謝謝!

您需要添加xOffsetyOffset成員,並在計算拐角點時將其添加到其中:

public class Triangle extends Point {
    protected int size;
    private int p1x, p2x, p3x, p1y, p2y, p3y;
    private int xOffset=0;
    private int yOffset=0;

    // ...

    //Draw the triangle with current specifications on screen.
    public void display(Graphics g) {
        p1x = (size / 3) + xOffset;
        p2x = (size / 2) + xOffset;
        p3x = ((2 * size) / 3) + xOffset;
        p1y = ((2 * size) / 3) + yOffset;
        p2y = (size / 3) + yOffset;
        p3y = ((2 * size) / 3) + yOffset;
        int[] xPoints = { p1x, p2x, p3x };
        int[] yPoints = { p1y, p2y, p3y };
        int npoints = 3;
        g.fillPolygon(xPoints, yPoints, npoints);
    }

    public void moveXY(int deltaX, int deltaY) {
        xOffset += deltaX;
        yOffset += deltaY;
    }
}

這應該讓您平移多邊形。 但是請注意,上面提到的moveXY方法要求參數包含與之前的差異 ,而不是絕對位置。 如果您想要一個絕對位置,那很容易實現,可以作為練習。 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM