JCheckBox 防止单击文本时更改选中状态

发布于 2024-12-22 01:18:00 字数 733 浏览 1 评论 0原文

JCheckBox 它继承自JToggleButton,因此单击文本与单击复选框具有相同的效果。但现在我需要一个 JCheckBox ,其行为如下:

  • 单击复选框:选中或取消选中复选框;
  • 单击文本:不更新复选框,但发出 ActionEvent

目前,我正在使用一个丑陋的黑客方法,通过覆盖 JCheckBox 中的 processMouseEvent() 函数,并且仅在鼠标单击时将其传播到 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"))
        }
    }
}

有没有更直接的解决方案?

JCheckBox it is inherited from JToggleButton, so clicking on text will have same effect of clicking the checkbox. But now I need a JCheckBox which behaves like this:

  • Clicking on checkbox: check or uncheck the checkbox;
  • Clicking on text: don't update the checkbox, but emit an ActionEvent.

Currently I am using a ugly hack by overriding the processMouseEvent() function in JCheckBox, and only propagating it to super if the mouse is clicking on left part of the CheckBox. The code is like this:

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"))
        }
    }
}

Is there a more straightforward solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜无邪 2024-12-29 01:18:00

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

Add a JCheckBox without text and a separate JLabel for text with own listener.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文