Swing让JButton无法集中精力

时间:2010-09-08 08:43:53

标签: java swing focus jbutton

我想制作一个Java swing按钮'not-focussable'。 该按钮根本不应该获得焦点,但应该能够接收鼠标点击。

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

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

3 个答案:

答案 0 :(得分:11)

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

JButton button = ...
button.setFocusable(false);

答案 1 :(得分:2)

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


资源:

答案 2 :(得分:1)

您可以使用一个喜欢按钮的accept方法实现自己的FocusTraversalPolicy(或扩展例如ContainerOrderFocusTraversalPolicy)。

JFrame frame = new JFrame();
... /* create other components */
frame.setFocusTraversalPolicy(new ContainerOrderFocusTraversalPolicy() {
    public boolean accept(Component c) {
        return super.accept(c) && c!=iDontLikeYouButton;
    }
});