1

次のコードに問題があります。私の意図は、getPoint を使用してマウス クリックの座標を arraylist に格納し、ユーザーがクリックした各位置に四角形を描画することです。getPoint オブジェクトから x 座標と y 座標を個別に抽出して役に立たない方法を高低で検索しました。私はJavaが初めてです。コンパイル時に問題を引き起こしている行は次のとおりです。

g2.drawRect(coordinateList(j).getHeight(),coordinateList(j.getWidth(),3,3);

私はおそらくかなり離れていることを知っていますが、新しいクリックポイントで長方形を再描画するために、配列リストからポイントの x 座標と y 座標を個別に抽出するにはどうすればよいですか?以前のクリックも?

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.event.MouseListener;
import java.awt.Point;
import java.util.*;

public class ClickCloud extends JPanel
{
    private int pointxy;
    //private Rectangle2D.Double r1;
    private boolean mouseClick;
    private int count;
    //private Point[] points;
    private Point coordinates = new Point(0, 0);
    private ArrayList<Point> coordinateList = new ArrayList<Point>();

    public ClickCloud() {
        this.setPreferredSize(new Dimension(500,500));
        this.addMouseListener(new MyMouseListener());
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g; 
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
          RenderingHints.VALUE_ANTIALIAS_ON);

        for (int j = 0; j < count; j++) {
            g2.setStroke(new BasicStroke(1.0f));
            g2.setPaint(Color.BLUE);
            g2.drawRect(coordinateList(j).getHeight(),coordinateList(j.getWidth(),3,3);
        }
    }

    private class MyMouseListener implements MouseListener {
        public void mouseClicked(MouseEvent me) { 
            count++;
            coordinates.setLocation(me.getPoint());
            coordinateList.add(coordinates.getLocation());
            repaint();
        }
        public void mousePressed(MouseEvent me) { }
        public void mouseReleased(MouseEvent me) { }
        public void mouseEntered(MouseEvent me) { }
        public void mouseExited(MouseEvent me) { }
    }

     public static void main(String[] args) {
        JFrame f = new JFrame("ClickCloud demo");
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setLayout(new FlowLayout());
        f.add(new ClickCloud());
        f.pack();
        f.setVisible(true);        
    }
}

ありがとう、

T

4

2 に答える 2

3

getLocationと をすべて忘れてくださいsetLocation。冗長です。に保管me.getPoint()するだけcoordinateListです。

次に、と をそれぞれxと でy座標を取得できます。point.getX()point.getY()

ではpaintComponent、点のリストを反復処理する簡単な方法があります。

for (Point coordinate : coordinateList) { //"for each coordinate in coordinateList"
   //do something with coordinate.getX() and coordinate.getY()
}
于 2013-03-03T19:15:53.140 に答える
0

ArrayList からポイントを適切に取得していません。

g2.drawRect(coordinateList(j).getHeight(),coordinateList(j.getWidth(),3,3);

jArrayList を使用してindex の項目を取得するには、次のメソッドを使用するだけget()です。

Point point = coordinateList.get(j);

次に、問題はpoint、ポイントのみを表すことです...幅と高さではなく、X座標とY座標しかありません。あなたが何をしたいのかを推測しようとして、ユーザーがクリックした場所に 3x3 の長方形を描きたいと仮定すると、次のように呼び出しますdrawRect()

g2.drawRect(point.getX(), point.getY(), 3, 3);

また:

  • countArrayList にあるポイントの数を知るために変数を処理する必要はありません。coordinateList の size() メソッドを使用するか、拡張された for loop を使用することをお勧めします。
  • 必要なイベントのみをオーバーライドするには、MouseListener の代わりに MouseAdapter を使用できます。
  • coordinatesメンバーと get/setLocation のものは必要ありません。書くだけcoordinateList.add(me.getPoint());
于 2013-03-03T19:16:49.277 に答える