java - 确定 FlowLayout 中 JComponent 的直接邻居

标签 java swing jpanel neighbours flowlayout

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

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

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

最佳答案

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

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

Container.getComponentAt(Point p) 

在新位置找到组件。

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

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

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

关于java - 确定 FlowLayout 中 JComponent 的直接邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5794012/

相关文章:

java - if 表达式算法出错

java - SelectedRow改变,当按下向上或向下时,JTable

java - 如何获取所选文件和文件夹的实际大小?

java - 使用 ArrayList<HashMap> 中的数据加载 JTable

java - 是否可以在swing中将隐藏的jpanel转换为图像?

java - 线程的问题

java - 在应用程序文件中使用 .getWindow()

java - 如何在 while 循环内声明自定义生成的字符串?

java - 构建类来创建 JFreeChart,如何将其添加到主界面中的 JPanel 中?

java - 从外部重写 JPanel 的 getPreferredSize() 和 setPreferredSize() 之间的区别