Java提供了一个简单的方法来禁用其按钮,使用button.setEnabled(false);
然而,这样做会使整个按钮变灰,从而影响禁用按钮上的文本和图像的可见性。
问题:在Java中是否有任何可用的方法/方式允许禁用按钮但不会变灰?
当然,我并不希望手动调整按钮的ActionListener
来实现此目的。
Java提供了一个简单的方法来禁用其按钮,使用button.setEnabled(false);
然而,这样做会使整个按钮变灰,从而影响禁用按钮上的文本和图像的可见性。
问题:在Java中是否有任何可用的方法/方式允许禁用按钮但不会变灰?
当然,我并不希望手动调整按钮的ActionListener
来实现此目的。
公司花费数百万美元开发一个通用的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更好)。
这可能需要一些工作,也许不是最佳的编码风格或解决方案,但它可能能够满足您的要求。我假设您有一个图标,用于启用按钮,另一个用于禁用按钮。
基本上,创建和管理自己的虚拟“禁用”状态以控制按钮(但不要触及内置的enabled或disabledIcon方法)。
在管理启用/禁用的代码中,当您“虚拟”禁用时,请将常规图标(setIcon())设置为您的禁用图标图形,并设置一个布尔值以反映按钮的虚拟“禁用”状态。当您“启用”时,请使用setIcon()返回默认图标,并设置布尔值以反映“已启用”的状态。
然后,在ActionListener中单击按钮时,您可以检查布尔值,如果布尔值表示虚拟状态为“禁用”,则什么也不做。