单击文本时,JCheckBox会阻止更改已检查状态

时间:2011-12-20 06:18:56

标签: java swing jcheckbox

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 个答案:

答案 0 :(得分:3)

添加一个没有文本的JCheckBox和一个单独的JLabel,用于带有自己的监听器的文本。