【问题标题】:Determining a JComponent's immediate neighbors in a FlowLayout在 FlowLayout 中确定 JComponent 的直接邻居
【发布时间】:2011-04-26 17:21:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: java swing jpanel neighbours flowlayout


    【解决方案1】:

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

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

    Container.getComponentAt(Point p) 
    

    在那个新位置找到组件。

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

    当然你会使用 Key Bindings 将 up/down KeyStroke 绑定到 Action。

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

    【讨论】:

      【解决方案2】:

      我认为您可以只使用已到位的焦点旅行实现,因为 tab 或 shift 可以正确导航 FlowLayout 中的选定按钮。

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

      更多信息:

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

      【讨论】:

        猜你喜欢
        • 2015-05-06
        • 1970-01-01
        • 2019-04-25
        • 2012-12-05
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 2016-04-06
        • 1970-01-01
        相关资源
        最近更新 更多