gpt4 book ai didi

java - 如何在鼠标事件发生后从数组列表中删除对象?

转载 作者:行者123 更新时间:2023-12-01 12:18:43 26 4
gpt4 key购买 nike

当我在 JPanel 中单击鼠标时,程序会创建一个绿点并在屏幕上显示点数计数器。这些点位于保存为对象的数组列表中。我正在尝试更改此代码,以便如果我在现有点的半径范围内单击(每个点的半径为 6),该点将从列表中消失并从屏幕上删除。

(在你问之前,是的,你可能会认为这是一个家庭作业问题,不,我不是想作弊)

我认为这涉及创建一个 for 循环来扫描数组中的对象,寻找指针可能单击过的对象。然而我很困惑如何准确地实现这一点

谢谢!

public class DotsPanel extends JPanel
{
private final int SIZE = 6; // radius of each dot

private ArrayList<Point> pointList;// "Point"s are objects that rep. the x & y coordinates of a dot





public DotsPanel()
{
pointList = new ArrayList<Point>();

addMouseListener (new DotsListener());

setBackground(Color.black);
setPreferredSize(new Dimension(300, 200));
}




public void paintComponent(Graphics page)
{
super.paintComponent(page);

page.setColor(Color.green);

for (Point spot : pointList)
page.fillOval(spot.x-SIZE, spot.y-SIZE, SIZE*2, SIZE*2);



page.drawString("Count: " + pointList.size(), 5, 15);//draws the image of the counter




}




private class DotsListener implements MouseListener
{


public void mousePressed(MouseEvent event)
{
pointList.add(event.getPoint());
repaint();
}


public void mouseClicked(MouseEvent event) {}
public void mouseReleased(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
}
}

最佳答案

显然,您需要修改 mousePressed() 的实现在DotsListener因为您不想在每次点击时无条件地添加一个新点。我建议将其更改为这样的内容:

  public void mousePressed(MouseEvent event)
{
Point hitDot = getHitDot(event);
if (hitDot == null) {
// no dots hit
pointList.add(event.getPoint());
} else {
// hit a dot
pointList.remove(hitDot);
}
repaint();
}

由于这是作业,我不会写 getHitDot为你。我会说你有正确的想法:循环遍历 pointList 的所有元素,测试每个 Point如果在一定距离内,则立即返回 SIZE鼠标按下坐标。您可以使用 Euclidean distance对每个点进行 HitTest 的公式。

关于java - 如何在鼠标事件发生后从数组列表中删除对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26837391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com