1

我有一个使用 FlowLayout 并包含许多 JButton 的 JPanel。按钮位于二维网格中(通过 FlowLayout)。JPanel 可以调整大小,当然,当调整大小时,网格中按钮的位置会发生变化(尽管顺序当然保持不变)。我希望用户能够使用键盘上的箭头键在网格中从一个按钮导航到另一个按钮。

有没有办法告诉给定的按钮,哪个按钮当前在它的正上方,哪个按钮在它的正下方,以及哪些按钮在它的左边和右边?

显然,如果我使用的是 GridLayout,这将是微不足道的,但出于其他原因我需要使用 FlowLayout。

4

2 回答 2

2

左右箭头键不是问题。正如 jzd 所提到的,您只需将 KeyStrokes 添加到遍历键集中。

对于向上/向下键,您需要创建自定义操作。您可以使用当前组件的位置。然后向上,您可以将 Y 坐标更改 10 个像素(组件之间的行间距为 5 个像素,再加上 5 个像素)。然后你可以使用:

Container.getComponentAt(Point p) 

在该新位置找到组件。

要向下移动,您将从按钮的位置开始,然后添加按钮的高度加上 10 个像素。

当然,您随后会使用 Key Bindings 将向上/向下 KeyStroke 绑定到 Action。

注意:我不确定您是否需要添加 5 个额外像素才能找到组件上方或下方的组件。您可能只能使用垂直间隙。我只是不确定边界检查如何在 getComponentAt() 方法上工作。

于 2011-04-26T18:00:08.200 回答
1

我认为您可以使用作为选项卡或 shiftFlowLayout正确导航所选按钮的焦点旅行实现。

我认为您只需要将箭头键添加到像forwardDefaultFocusTraversalKeys

更多信息:

http://download.oracle.com/javase/tutorial/uiswing/misc/focus.html

于 2011-04-26T17:34:47.527 回答