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 に答える