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