1
2
既然您有一个JLabel数组,那么您的解决方案已经完成了一半!我实际上回答了一个 similar question 就在最近。 你可能会发现这是有益的。 至于“捕捉到位”,如果你是根据阵列标记绘制瓷砖的手,捕捉是为你完成的,因为它们将在捕捉后被绘制到位。 我对麻将不太了解,但我认为麻将牌与Uno手中的牌相似,因为你不受设定值的限制。如果是这种情况,ArrayList可能非常有益。你可以阅读一些关于 ArrayList vs Array here . 编辑:
我认为有几种方法可以解决这个问题,可能还有更多: 如果每个平铺都获得了框架/屏幕/窗格的相对部分,那么您可以获得它的x坐标值(平铺上的红线),当您向左拖动鼠标(蓝色箭头,红色圆点),越过绿色箭头时,会自动将该平铺向左移动。 如果在本例中,当鼠标移动超过固定宽度时,有最大数量的平铺(例如4),则可以基于该预定值直接交换平铺。 也许我能看到的最简单的方法是:
当他们释放拖放时(我假设是点击和拖动),获取鼠标最后一个已知位置的坐标,然后系统地将位置与每个索引进行比较,直到找到位置,然后以这种方式处理。 由于本例中的X值小于所有其他值,因此将其放置在数组列表的前面。阵列列表位置决定每个平铺的绘制位置。当您在此处释放鼠标时,选定的平铺将保存在一个局部变量中,然后将所有平铺移动到右侧的一个插槽以适应新的更改,最后,根据数组索引0,将选定的平铺位置设置为(150100)。 |