JCheckBox предотвращает изменение проверенного статуса при нажатии на текст - PullRequest
1 голос
/ 20 декабря 2011

JCheckBox наследуется от JToggleButton, поэтому нажатие на текст будет иметь тот же эффект, что и установка флажка.Но теперь мне нужен JCheckBox, который ведет себя так:

  • Нажатие на флажок: установите или снимите флажок;
  • Нажатие на тексте: не обновлять флажок, ноиспустить ActionEvent.

В настоящее время я использую некрасивый хак, переопределяя функцию processMouseEvent() в JCheckBox, и распространяю ее на super, только если мышь щелкает по левой частииз CheckBox.Код выглядит так:

public class MyCheckBox extends JCheckBox {

    @Override
    protected void processMouseEvent(MouseEvent e) {
        if (e.getX() < this.getHeight()) {
            super.processMouseEvent(e);
        } else {
            this.fireActionPerformed(new ActionEvent(this, 0, "click on text"))
        }
    }
}

Есть ли более простое решение?

1 Ответ

3 голосов
/ 20 декабря 2011

Добавьте JCheckBox без текста и отдельный JLabel для текста с собственным слушателем.

...