3

假设您有一个JCheckBox要用作开/关指示器的。您用于setEnabled(false)禁用鼠标点击JCheckBox。但setEnabled(false)也会使复选框和复选框的文本变灰。有没有办法进行自定义setEnabled(false),以免发生变灰?

如果这是不可能的,那么唯一的解决方案是定制一个ButtonModel

4

4 回答 4

5

您可以继承 JCheckBox 并覆盖 processMouseEvent/processKeyEvent 以不做任何事情。

public class ReadOnlyCheckBox extends JCheckBox {
    public ReadOnlyCheckBox (String text, boolean selected) {
        super(text,selected);
    }

    protected void processKeyEvent(KeyEvent e) {
    }

    protected void processMouseEvent(MouseEvent e) {

    }
}
于 2011-02-07T22:44:45.987 回答
2

扩展JCheckBox将允许您覆盖该setEnabled方法,并将您传递CustomJCheckBox给任何期望 aJCheckBox作为参数的代码。这应该使您不必重新实现复选框中的所有其他内容,就像实现 ButtonModel 一样。

我对您使用该复选框的用途感到有些困惑——它未启用,但您仍希望根据其他参数显示或不显示检查?在这种情况下,为什么要使用输入元素?

于 2011-02-07T17:30:18.807 回答
2

已请求更改禁用的 JCheckbox 中的文本颜色,并且在 Sun Bug 数据库中仍然是一个未解决的问题:

[6289684] 更改禁用的 JCheckbox 文本颜色的方法

查看错误详细信息以获取解决方法。

于 2011-02-07T17:35:48.207 回答
0

您可以自定义Button UI来执行此操作。

于 2011-02-07T17:28:40.287 回答