我遇到以下代码的问题。我的目的是使用getPoint将鼠标单击的坐标存储到arraylist中,然后在用户单击的每个位置绘制一个矩形。我已经搜索了高低,以了解如何从getPoint对象中单独提取x和y坐标无济于事。我是java的新手,在编译时给我带来麻烦的是:
g2.drawRect(coordinateList(j)的.getHeight(),coordinateList(j.getWidth(),3,3);
我知道我可能已经离开了,但是如何从数组列表中单独提取点的x和y坐标,数组的一个项目为1,以便在新的点击点处重新绘制一个矩形,还有以前的所有点击次数?
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);
}
}
谢谢,
Ť
答案 0 :(得分:2)
忘记所有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()
}
答案 1 :(得分:0)
你没有从ArrayList获得正确的点。
g2.drawRect(coordinateList(j).getHeight(),coordinateList(j.getWidth(),3,3);
要使用ArrayList获取索引j
的项目,只需使用方法get()
:
Point point = coordinateList.get(j);
然后问题是point
只代表点......它们只有X和Y坐标,而不是宽度和高度。如果我试图猜测你想做什么,并假设你想在用户点击的地方绘制3x3矩形,你可以这样调用drawRect()
:
g2.drawRect(point.getX(), point.getY(), 3, 3);
此外:
count
变量即可知道ArrayList中的点数。只需使用coordinateList的size()方法甚至更好,使用enhanced for loop。coordinates
成员和get / setLocation内容。只需写下coordinateList.add(me.getPoint());