我做了一个程序,每当我点击鼠标时,它会在我点击的点上绘制一个圆圈, 现在我希望它检查我点击的点是否已经有一个圆圈,如果有,那么我想要删除那个圆圈。 我想用一个2D保护者来做这件事会保留已经拿走的所有点,有谁能告诉我我该怎么做? 到目前为止,这是我的代码:
public class delta extends Applet implements MouseListener {
private Graphics globalg;
public void init(){
this.addMouseListener(this);
}
public void paint(Graphics g){
this.setSize(new Dimension (1000, 1000));
globalg = g.create();
}
public void draw(int x, int y , int width , int height){
globalg.setColor(getColor());
Ellipse2D circle = new Ellipse2D.Double((double) x , (double) y ,(double) width , (double) height);
Graphics2D g2 = (Graphics2D) globalg;
g2.fill(circle);
}
public Color getColor(){
int r = (int) (Math.random() * 256);
int g = (int) (Math.random() * 256);
int b = (int) (Math.random() * 256);
return new Color(r , g ,b);
}
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
draw(x , y , 20 , 20);
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:0)
我不会告诉你到底要做什么,但我会让你朝着正确的方向前进。
第一步 - 您的数据结构
现在,我可以看到你为什么要使用嵌套的ArrayList
,但从概念上讲这不是很好。通过将相关值包含在Object
中,您可以表示没有复杂数据结构的值矩阵。现在,您可以创建自己的对象,或者您可以使用Java Point
类。出于此目的,我们将创建您自己的对象,以便您可以轻松添加自己的值(颜色,大小等)。
public class MyCircle {
}
在那里,您可以存储x
和y
个职位。然后可以将这些内容存储到List
中,以便通过以下内容访问您的MyCircle
个对象:
private List<MyCircle> circles;
第二步 - 处理鼠标点击
您已经实现了MouseListener
界面,因此我们正处于建立基础的好地方。现在,就我看来,处理鼠标点击时需要考虑两种可能性。
No Circle Exists
如果不存在圆圈,则绘制它。你似乎已经处理了这一点,所以没有任何意义解释它。
圆圈存在
这是你停止的地方。首先,您需要遍历您的数据结构,我们将其命名为circles
..
for(MyCircle circle : circles) {
}
现在,我假设你在这里有类似x
和y
的东西,与相关的访问者和变异者一样长。然后你可以检查坐标..
if(circle.getX() == x && circle.getY() == y) {
// A circle was put at this point..
}
注意: 这会使删除圈子变得非常困难。你真正想要的是能够检查用户是否点击了里面一个圈子!你怎么做到这一点?嗯,那就是比较价值观。您希望确保用户点击的x
值大于圆圈的x
值,但小于圆圈的x + width
。同样,您要确保用户同时点击的y
值大于圆圈的y
值,但小于圆圈的y + width
。
if(x > circle.getX() && x < (circle.getX() + circle.getWidth())) {
// This was a click inside the circle on the X axis. Your turn to check the y!
}