我有一个使用 FlowLayout 并包含许多 JButton 的 JPanel。这些按钮位于二维网格中(通过 FlowLayout)。 JPanel 可以调整大小,当然,当它调整时,网格中按钮的位置会发生变化(当然,顺序保持不变)。我希望用户能够使用键盘上的箭头键在网格中从一个按钮导航到另一个按钮。
有没有办法告诉给定按钮,哪个按钮当前在它的正上方,哪个按钮在它的正下方,以及哪个按钮在它的左边和右边?
显然,如果我使用 GridLayout,这将是微不足道的,但出于其他原因我需要使用 FlowLayout。
最佳答案
左右箭头键不是问题。正如 jzd 所提到的,您只需将 KeyStrokes 添加到遍历键集中即可。
对于上/下键,您需要创建自定义操作。您可以使用当前组件的位置。然后向上你可以改变 Y 坐标,比如 10 个像素(组件之间的行间距为 5 个像素,再加上额外的 5 个像素)。然后你可以使用:
Container.getComponentAt(Point p)
在新位置找到组件。
要向下移动,您将从按钮的位置开始,然后添加按钮的高度加上 10 像素。
当然,您随后会使用 Key Bindings 将上/下 KeyStroke 绑定(bind)到 Action。
注意:我不确定您是否需要添加 5 个额外的像素来找到组件上方或下方的组件。您可能只能使用垂直间隙。我只是不确定边界检查如何在 getComponentAt() 方法上工作。
关于java - 确定 FlowLayout 中 JComponent 的直接邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5794012/