设置JButton不可点击但不会变灰

时间:2015-02-12 01:49:16

标签: java swing jbutton

Java提供了一种使用button.setEnabled(false);

禁用其按钮的简单方法

但是这样做会使整个按钮变灰,从而影响禁用按钮上文本和图像的可见性。

问题:Java中是否有任何可用的方法/方法可以禁用按钮但不会灰显?

当然,我不希望手动调整按钮的ActionListener来实现这一点。

2 个答案:

答案 0 :(得分:2)

公司花费数百万美元来开发用户界面很常见,并且可供所有用户使用。

如果没有可视指示,用户如何知道该按钮被禁用?

  

我不希望手动调整按钮的ActionListener来实现这一点。

为什么呢?这种方法有什么问题?它比为您的代码可能运行的所有平台创建自定义LAF更好。

无论如何(咆哮完成)你可以使用自定义ButtonModel:

button.setModel( new DefaultButtonModel()
{
    @Override
    public boolean isArmed()
    {
        return false;
    }

    @Override
    public boolean isPressed()
    {
        return false;
    }
});

应该适用于所有LAF并且按钮不会被按下(我认为这比仅删除ActionListener更好)。

答案 1 :(得分:0)

这是一些工作,可能不是最好的编码风格或解决方案,但它可能满足您的要求。我假设你有一个图标用于启用按钮,而另一个用于不用的按钮。

基本上,为按钮创建和管理您自己的虚拟“禁用”状态(但不要触及内置的enabled或disabledIcon方法)。

在管理启用/禁用的代码中,当您禁用“虚拟”时,将常规图标(setIcon())设置为禁用的Icon图形,并设置一个布尔值以反映虚拟的“禁用”状态按钮。 当你“启用”时,使用setIcon()返回默认的Icon,并设置布尔值以反映“enabled”。

然后,当单击该按钮时,在ActionListener中,您可以检查布尔值,如果布尔表示虚拟状态为“已禁用”,则不执行任何操作。