【问题标题】:Comparing distance of swing object in an ArrayList?比较ArrayList中摆动对象的距离?
【发布时间】:2014-03-13 14:05:52
【问题描述】:

我有一个 SwingObjects 的 ArrayList,它们被绘制到 JPanel 上。我正在尝试比较哪些对象彼此最接近,但我真的不知道如何解决这个问题。我做了一个辅助方法,将当前的 SwingObject 与另一个进行比较。

public double distance(SwingObject obj2)
{
    int x1 = this.getX();
    int y1 = this.getY();
    int x2 = obj2.getX();
    int y2 = obj2.getY();

    double distance = Math.sqrt(((x2-x1)*(x2-x1)) + ((y2-y1)*(y2-y1)));
    return distance; 
}

我有一个比较器方法,可以将当前的 SwingObject 与其他对象进行比较。

public void closest(SwingObject c, ArrayList<SwingObject> swingList)
{
}

有没有办法将数组列表中的所有内容相互比较并确定相对于当前 SwingObject c 的短裤?

【问题讨论】:

  • 你不能循环遍历 List 以获取每个对象,然后在该循​​环内,再次遍历 List 以将每个对象与其他对象进行比较吗?
  • 为了尽快获得更好的帮助,请发布MCTaRE(经过测试和可读的最小完整示例)。
  • 嗯,我没有将所有内容相互比较,而我只是将一个与其他所有内容进行比较。就像如果我有 {a, b, c, d} 我会拿 a 并将其与 b, c, d 进行比较,看看哪一个是 a 的壁橱,并使其成为最接近的 SwingObject 之一。
  • 提示:添加@KevinWorkman(或重要的@)以通知某人有新评论。顺便说一句 - 什么是 SwingObject?哦,没关系,以 MCTaRE 的形式回答。
  • @helloMundo 我不确定您所描述的与我使用基本嵌套 for 循环的建议有何不同。

标签: java swing arraylist


【解决方案1】:

在最接近的内部,循环遍历swingList中的所有SwingObject,并将c到swingList的元素的距离存储在一个新的List中。之后,对该本地列表进行排序,并从最近的列表中返回。

您的距离函数也可能存在问题。 Swing 组件的 X 和 Y 位置相对于它们的父容器。所以你会希望所有的 X 和 Y 都是相对的,所以使用SwingUtilities.convertPoint

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2013-08-26
    相关资源
    最近更新 更多