0

所以我有以下代码:

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,我将能够拖动三角形但不能重塑它。

谢谢!

4

1 回答 1

1

在计算角点时,您需要添加xOffset和成员并添加它们:yOffset

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方法需要包含与之前的差异的参数,而不是绝对位置。如果您想要一个绝对位置,那很容易实现并留作练习。;)

于 2013-01-26T01:19:39.937 回答