确定 FlowLayout 中 JComponent 的直接邻居

发布于 2024-11-03 14:21:58 字数 286 浏览 6 评论 0原文

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

有没有办法告诉给定的按钮,哪个按钮当前位于其正上方,哪个按钮位于其正下方,以及哪些按钮位于其紧邻的左侧和右侧?

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

I have a JPanel that uses a FlowLayout and contains many JButtons. The buttons are in a 2-dimensional grid (by the FlowLayout). The JPanel can be resized, and, of course, when it is, the location of the buttons in the grid changes (although the order, of course, stays the same). I want the user to be able to navigate from one button to another in the grid by using the arrow keys on the keyboard.

Is there a way to tell for a given button, which button is currently directly above it, which button is directly below it, and which buttons are to its immediate left and right?

Obviously, this would be trivial if I were using a GridLayout, but I need to use a FlowLayout for other reasons.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你不是我要的菜∠ 2024-11-10 14:21:58

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

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

Container.getComponentAt(Point p) 

在该新位置查找组件。

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

当然,您随后可以使用按键绑定将向上/向下 KeyStroke 绑定到操作。

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

The left and right arrow keys are not an issue. As mentioned by jzd you just add the KeyStrokes to the set of traversal keys.

For the up/down keys you will need to create a custom Action. You can use the location of the current component. Then to go up you can change the Y coordinated by say 10 pixels (5 pixels for the row gap between components pluse an extra 5). Then you can use the:

Container.getComponentAt(Point p) 

to find the component at that new location.

To go down you would start with the location of the button then add on the height of the button plus 10 pixels.

Of course you would then use Key Bindings to bind the up/down KeyStroke to the Action.

Note: I'm not sure if you need to add the 5 extra pixels to find the componen above or below the component. You may just be able to use the vertical gap. I'm just not sure how the boundary checking works on the getComponentAt() method.

当爱已成负担 2024-11-10 14:21:58

我认为您可以使用焦点移动实现来正确地导航 FlowLayout 中的选定按钮。

我认为您只需将箭头键添加到类似 forwardDefaultFocusTraversalKeys 的集合中。

更多信息:

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

I think you can just use focus travel implementation that is in place as tab or shift navigates the selected buttons in a FlowLayout correctly.

I think you just need to add the arrow keys to sets like the forwardDefaultFocusTraversalKeys

More info:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文