2D arraylist保持一个点

时间:2014-11-10 09:28:02

标签: java arraylist

我做了一个程序,每当我点击鼠标时,它会在我点击的点上绘制一个圆圈, 现在我希望它检查我点击的点是否已经有一个圆圈,如果有,那么我想要删除那个圆圈。 我想用一个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

}

}

1 个答案:

答案 0 :(得分:0)

我不会告诉你到底要做什么,但我会让你朝着正确的方向前进。

第一步 - 您的数据结构

现在,我可以看到你为什么要使用嵌套的ArrayList,但从概念上讲这不是很好。通过将相关值包含在Object中,您可以表示没有复杂数据结构的值矩阵。现在,您可以创建自己的对象,或者您可以使用Java Point类。出于此目的,我们将创建您自己的对象,以便您可以轻松添加自己的值(颜色,大小等)。

public class MyCircle {
}

在那里,您可以存储xy个职位。然后可以将这些内容存储到List中,以便通过以下内容访问您的MyCircle个对象:

private List<MyCircle> circles;

第二步 - 处理鼠标点击

您已经实现了MouseListener界面,因此我们正处于建立基础的好地方。现在,就我看来,处理鼠标点击时需要考虑两种可能性。

  • 不存在圆圈,您需要绘制一个。
  • 存在圆圈,您需要将其删除。

No Circle Exists

如果不存在圆圈,则绘制它。你似乎已经处理了这一点,所以没有任何意义解释它。

圆圈存在

这是你停止的地方。首先,您需要遍历您的数据结构,我们将其命名为circles ..

for(MyCircle circle : circles) {
}

现在,我假设你在这里有类似xy的东西,与相关的访问者和变异者一样长。然后你可以检查坐标..

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!
}