使JButton不可点击但不变灰色

3

Java提供了一个简单的方法来禁用其按钮,使用button.setEnabled(false);

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

问题:在Java中是否有任何可用的方法/方式允许禁用按钮但不会变灰?

当然,我并不希望手动调整按钮的ActionListener来实现此目的。


你如何在视觉上表明按钮已被禁用?你可以实现自己的外观并更改禁用状态的绘制方式... - MadProgrammer
最困难的问题是设置setDisabledIcon,同时能够在按钮上显示文本。 - user3437460
然而,您可以使用禁用图标图形覆盖默认图标,并自己管理状态。解决方案在下面更详细地写出。 - Phil Freihofner
2个回答

2

公司花费数百万美元开发一个通用的UI,可供所有用户使用。

如果没有视觉提示,用户怎么知道按钮被禁用了呢?

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

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

无论如何(发泄结束),您可以使用自定义ButtonModel:

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

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

应该适用于所有LAF(Look And Feel),并且按钮不会被绘制为按下状态(我认为这比仅仅删除ActionListener更好)。


0

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

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

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

然后,在ActionListener中单击按钮时,您可以检查布尔值,如果布尔值表示虚拟状态为“禁用”,则什么也不做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接