存储在getPoint()对象中的坐标
问题描述:
我遇到以下代码的问题。我的意图是使用getPoint将鼠标点击的坐标存储到数组列表中,然后在用户单击的每个位置绘制一个矩形。我已经搜索了如何从getPoint对象中单独提取x和y坐标而无济于事。我是新来的Java,就是给我的麻烦在编译时的路线是:存储在getPoint()对象中的坐标
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);
}
}
感谢,
牛逼
答
忘记了所有的getLocation
和setLocation
。这是多余的。只需在您的coordinateList
中储存me.getPoint()
即可。
然后,您可以分别获得x
和y
坐标,分别为point.getX()
和point.getY()
。
在paintComponent
,有遍历点的列表更简单的方法:
for (Point coordinate : coordinateList) { //"for each coordinate in coordinateList"
//do something with coordinate.getX() and coordinate.getY()
}
答
你是不是从ArrayList中获取正确的点。
g2.drawRect(coordinateList(j).getHeight(),coordinateList(j.getWidth(),3,3);
要在索引j
有一个ArrayList获得该项目,只需使用方法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。 - 您可以使用MouseAdapter而不是MouseListener来仅覆盖所需的事件。
- 你不需要
coordinates
成员和get/setLocation的东西。只写coordinateList.add(me.getPoint());
对不起,很明显,我不知道如何在代码中正确发布代码。请跟我来。 – user2129525 2013-03-03 19:32:28
太好了,看起来像这肯定是在某处,现在的问题是getX()和getY()会给出double值,其中drawRect只需要ints。所以我认为我必须首先将这些值改为整数。我可以直接在我的paintComponent方法中执行此操作吗?(点坐标:坐标列表){ g2.setStroke(new BasicStroke(1.0f)); g2.setPaint(Color.BLUE); g2.drawRect(coordinate.getX(),coordinate.getY(),3,3); } } 'code' 谢谢, T – user2129525 2013-03-03 19:33:29
如何在评论中包装代码以正确显示它? – user2129525 2013-03-03 19:34:33