我有一个使用FlowLayout并包含许多jbutton的JPanel。按钮位于二维网格中(通过FlowLayout)。JPanel可以调整大小,当然,当调整大小时,按钮在网格中的位置会发生变化(当然,顺序保持不变)。我希望用户能够通过使用键盘上的箭头键在网格中从一个按钮导航到另一个按钮。
是否有一种方法可以告诉给定的按钮,哪个按钮当前直接在它上面,哪个按钮直接在它下面,哪些按钮在它的左边和右边?
显然,这将是微不足道的,如果我使用GridLayout,但我需要使用FlowLayout的其他原因。
左右方向键不是问题。正如jzd所提到的,您只需将KeyStrokes添加到遍历键集合中。
对于上/下键,您需要创建一个自定义动作。您可以使用当前组件的位置。然后向上,你可以改变Y坐标,比如10个像素(组件之间的行间距为5个像素加上额外的5个像素),然后你可以使用:
Container.getComponentAt(Point p)
查找新位置的组件。
要向下,你可以从按钮的位置开始,然后添加按钮的高度加上10像素。
当然,你可以使用键绑定来将上/下键击绑定到动作。
注意:我不确定你是否需要添加5个额外的像素来找到组件上方或下方的组件。你可以使用垂直的间隙。我只是不确定边界检查如何在getComponentAt()方法上工作。
我认为你可以使用焦点移动实现,这是在tab或shift在FlowLayout
中正确导航所选按钮的地方。
我认为你只需要添加方向键设置像forwardDefaultFocusTraversalKeys
更多信息:http://download.oracle.com/javase/tutorial/uiswing/misc/focus.html