どのように私は私がpaintComponentで塗装し、フロントにマウスでクリックしたことを私の形状をもたらすことができますか?

Edenco:

私は、3つの異なる形状(丸、三角や四角)を塗装し、プログラムを持っていると私は、マウスでドラッグしてみてください。私は何をしたい前にクリックされている形状をもたらすことです。私は、例えばクリックされた円が最後に塗装する必要がある、またはそれがペイントordningを追跡するために、3つの異なるペイントメソッドを作成することが可能であることをプログラムに伝えるために)(再描画と一緒に引数を渡すことはできますか?

もう一つの問題は、それが円とTriangelのが、サークルを通じてドラッグ広場にうまく動作し、マウスが同じエリア内にある場合は、それらと一緒に広場取るTRIANGEL、私の場合はループです。私は1つをドラッグしながら、私は他の図のためのマウスリスナーをオフにすることはできますか?

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Rectangle2D;
import java.awt.geom.Ellipse2D;
import java.awt.Polygon;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class MouseMoveScale extends JPanel {

    public boolean first;

private Rectangle2D.Float myRect = new Rectangle2D.Float(50, 50, 100, 100);
private Ellipse2D.Float myCr = new Ellipse2D.Float(10,10, 100, 100);
private Polygon myTr   = new Polygon(new int []  {120, 60, 240}, new int[] {150, 200, 200}, 3);

MovingAdapter ma = new MovingAdapter();

public MouseMoveScale() {
    addMouseMotionListener(ma);
    addMouseListener(ma);
}
public void paintComponent( Graphics g ) {

}
public void paint(Graphics g) {

    super.paint(g);
    Graphics2D square = (Graphics2D) g;
    Graphics2D triangle = (Graphics2D) g;
    Graphics2D circle = (Graphics2D) g;

    square.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    square.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    square.setColor(new Color(0, 0, 200));
    square.fill(myRect);

    triangle.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    triangle.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    triangle.setColor(new Color(139, 89, 255));
    triangle.fill(myTr);

    circle.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    circle.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    circle.setColor(new Color(0, 0, 117));
    circle.fill(myCr);
}

class MovingAdapter extends MouseAdapter {

    private int x;
    private int y;

    public void mousePressed(MouseEvent e) {
        x = e.getX();
        y = e.getY();
    }

    public void mouseDragged(MouseEvent e) {
        int dx = e.getX() - x;
        int dy = e.getY() - y;

        if (myRect.contains(x, y)) {
            myRect.x += dx;
            myRect.y += dy;
            repaint();
        }

        else if (myTr.contains(x, y)) {
          myTr.translate(dx, dy);
            repaint();
       }
        else if (myCr.contains(x, y)) {
            myCr.x += dx;
            myCr.y += dy;
            repaint();
        }
        x += dx;
        y += dy;
    }
    }



    public static void main(String[] args) {
    JFrame frame = new JFrame("Shapes World");
    MouseMoveScale m = new MouseMoveScale();
    m.setDoubleBuffered(true);
    frame.add(m);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
   }
   }
ウナギのホバークラフトのフル:

提案:

  1. Aにすべての図形を入れて List<Shape>
  2. 反復は、paintComponentで前方リストを、それぞれの形状を描きます。描かれた最後のものは上になります。
  3. マウスリスナー/アダプタでは、形状のリストを繰り返し処理し、後方には、押された形状を調べるには、任意の形状が発見されたとして、すぐにループを抜けます。トップの1が最初に確認されますように、この後方を行います。
  4. 形状が発見された場合は、リストから削除した後、それを再度追加してコールrepaint()これは、上に描画されます。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=389491&siteId=1