我遇到以下代碼的問題。我的意圖是使用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);
}
}
感謝,
牛逼
對不起,很明顯,我不知道如何在代碼中正確發佈代碼。請跟我來。 – 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