Свинг делает JButton не сфокусированным - PullRequest
1 голос
/ 08 сентября 2010

Я хочу сделать кнопку свинга Java «не сфокусированной».Кнопка вообще не должна получать фокус, но должна иметь возможность получать щелчки мышью.

Я подумал о следующих вариантах, но они либо не решают мою проблему полностью, либо не кажутся элегантными.Есть ли другие / лучшие / предлагаемые варианты?

  1. Перемещение фокуса на следующий компонент сразу же, когда кнопка получает фокус (но что тогда делать, если кнопка является единственным компонентом в интерфейсе пользователя?чем метки?)
  2. Реализовать еще один нефокусируемый компонент в виде кнопки (метка с событиями мыши, границами ...) (мне это не очень элегантно)
  3. Создать анонимногоРеализация кнопки, которая переопределяет события клавиатуры, так что она не реагирует на события клавиатуры (это не решает проблему фокуса, но для меня это нормально, так как корень проблемы состоит в том, чтобы избежать случайных нажатий клавиатуры. Я сделаю это толькоесли вариантов нет вообще, но даже тогда предпочтите вариант 2)

Ответы [ 3 ]

11 голосов
/ 08 сентября 2010

Все компоненты Swing имеют метод setFocusable, чтобы сделать это:

JButton button = ...
button.setFocusable(false);
2 голосов
/ 08 сентября 2010

Вы пытались вызвать метод setFocusable(), унаследованный от java.awt.Component?


Ресурсы:

1 голос
/ 08 сентября 2010

Вы можете реализовать свою собственную FocusTraversalPolicy (или расширить, например, ContainerOrderFocusTraversalPolicy) с помощью метода accept, который просто не , как ваша кнопка.

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