简体   繁体   中英

How to enlarge/move polygon in Java?

So I have the following code:

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);
    }
}

And the following code is used to enlarge/reduce the triangle:

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

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

The problem is, I also want the ability to drag it using the following code:

    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();
    }
});

And the only way I can see it is that I can have either one or the other. How do I combine it so I can have both features? At the moment it resizes perfectly, but say I change the variablle size in the x/y coordinates to yPos/xPos I'll be able to drag the triangle but not reshape it.

Thanks!

You'll want to add xOffset and yOffset members and add those in when calculating the corner points:

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;
    }
}

This should let you translate the polygon. Note however that the moveXY method stated above expects parameters containing the difference from earlier, not an absolute position. If you want an absolute position instead, that's easy to achieve and left as an exercise. ;)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM