JCheckBox 防止单击文本时更改选中状态
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
添加一个不带文本的 JCheckBox 和一个单独的 JLabel,用于带有自己的侦听器的文本。
Add a JCheckBox without text and a separate JLabel for text with own listener.