2

我想让一个 Java swing 按钮“不可聚焦”。该按钮根本不应该接收焦点,但应该能够接收鼠标点击。

我想到了以下选项,但这些要么不能完全解决我的问题,要么看起来不优雅。还有其他/更好/建议的选择吗?

  1. 当按钮获得焦点时立即将焦点移动到下一个组件(但是如果按钮是 UI 上除标签之外的唯一组件,我该怎么办?)
  2. 将另一个不可聚焦的组件实现为按钮(带有鼠标事件、边框的标签......)(这对我来说看起来不太优雅)
  3. 创建一个覆盖键盘事件的匿名按钮实现,使其不响应键盘事件(这不能解决焦点问题,但对我来说还可以,因为问题的根源是避免意外的键盘点击。我会仅当根本没有选项时才这样做,但即便如此,更喜欢选项 2)
4

3 回答 3

12

所有 Swing 组件都有一个 setFocusable 方法来执行此操作:

JButton button = ...
button.setFocusable(false);
于 2010-09-08T08:50:37.663 回答
2

您是否尝试调用setFocusable()继承自的方法java.awt.Component


资源 :

于 2010-09-08T08:49:52.167 回答
1

您可以使用不喜欢您的按钮的接受方法来实现您自己的 FocusTraversalPolicy(或扩展例如 ContainerOrderFocusTraversalPolicy)。

JFrame frame = new JFrame();
... /* create other components */
frame.setFocusTraversalPolicy(new ContainerOrderFocusTraversalPolicy() {
    public boolean accept(Component c) {
        return super.accept(c) && c!=iDontLikeYouButton;
    }
});
于 2010-09-08T08:49:27.817 回答