2017-03-31 46 views
1

由于这是功课,我不想要一个完整的解决方案,而是在正确的方向上推动我应该看的东西(因此为什么没有代码)。在ArrayList中获取最新形状以绘制其他形状 - Java

我有一个处理鼠标输入的类。从该类中检查用户是否按住鼠标按钮,然后将该形状设置为活动形状。当用户拖动形状时,形状随之移动并相应地改变位置。一旦鼠标被释放,selectedShape被设置为null,并且面板正在重新绘制。

我希望selectedShape在所有其他形状之上,所以如果所选形状被拖拽到任何其他形状上,它就是盈方。

从我所了解的repaint()方法重新绘制它们,因为它们出现在ArrayList中,我需要使用另一种方法在顶部绘制该形状(从视觉上讲)。

我会在哪里添加此功能?在MouseHandler类中?

类包括那些相关: MyShape的 - 父类 三角形,正方形,圆形 - 孩子 - 有它自己的draw(G)的方法和setPosition两种 MouseHandler - 鼠标移动和调用每个形状设置新的位置。 MyShapeHandler - 添加/删除列表中的形状 面板 - 创建形状的实例并使用MyShapeHandler帮助方法addShape添加到ArrayList。使用drawComponent(g)在ArrayList中绘制每个形状。 窗口 - 添加面板的JFrame

+0

如果不需要形状对象的特定顺序,则可以使用List接口提供的'set(index,object)'交换最后一个选定对象和arraylist中的最后一个对象。您应该在MouseReleased方法的MouseHandler中执行此操作。 – skubski

+0

鉴于形状可能如何重叠或完全被其他形状包围,我会保留一个单独的列表(如'JList')的所有形状。该列表将允许选择“当前形状移动”。然后,您可以简单地通过绘画,首先绘制整个形状列表,然后最后绘制选定的形状(第二次)来模拟它在顶部。 –

回答

0

您可以尝试重新排列列表,以便所需的形状为first/last。试验一下,看看列表中形状的索引是否与它在屏幕前面或后面的位置相对应。

+0

这是一个好主意,我现在已将所选形状替换为最后一个。 ArrayList中没有方便的方法来相互切换2个位置?因为它现在是最后一个位置(shapes.set(shape.size() - 1,selectedShape)被这个selectedShape所取代(所以三角形被完全删除) –

+0

我设法让它通过使用Collections.swap() 。非常感谢!它现在就像一种魅力。我在这里是新的,有什么我需要做的像投票答案或类似的? –

+0

@VitalViper伟大你可以投我的答案,以便我可以得到一些声誉: - )另外你可以接受这个答案作为最好的答案,所以我可以得到更多的声誉:-)看这里http://stackoverflow.com/tour有关这方面的更多细节。 –