有没有办法自定义Java的setEnabled(false)?

时间:2011-02-07 17:19:20

标签: java swing jcheckbox

假设您有JCheckBox想要用作开/关指示符。您使用setEnabled(false)禁用JCheckBox上的鼠标点击。但是setEnabled(false)也会使checkBox和checkBox的文本变灰。有没有办法自定义setEnabled(false),以便不会发生灰化?

如果那是不可能的,唯一的解决方案是自定义ButtonModel吗?

4 个答案:

答案 0 :(得分: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) {

    }
}

答案 1 :(得分:2)

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

我对你正在使用的复选框感到有点困惑 - 它没有启用,但你仍然希望根据其他参数检查是否出现?在这种情况下,为什么要使用输入元素?

答案 2 :(得分:2)

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

[6289684] Way to change the color of disabled JCheckbox text

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

答案 3 :(得分:0)

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