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