我正在用Java开发一个使用NetBeans IDE的项目,我需要禁用特定的JButton。我使用下面的代码。如何在不隐藏标签的情况下禁用JButton?
IssuBtn.setEnabled(false);
但它被禁用后,它不显示JButton上的文本。我如何在JButton上保留该文本?
我正在用Java开发一个使用NetBeans IDE的项目,我需要禁用特定的JButton。我使用下面的代码。如何在不隐藏标签的情况下禁用JButton?
IssuBtn.setEnabled(false);
但它被禁用后,它不显示JButton上的文本。我如何在JButton上保留该文本?
本实验建议一个答案是'使用不是金属的PLAF'。
import java.awt.*;
import javax.swing.*;
class LookOfDisabledButton {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JPanel gui = new JPanel(new BorderLayout(3,3));
JPanel pEnabled = new JPanel(new GridLayout(1,0,2,2));
pEnabled.setBackground(Color.green);
gui.add(pEnabled, BorderLayout.NORTH);
JPanel pDisabled = new JPanel(new GridLayout(1,0,2,2));
pDisabled.setBackground(Color.red);
gui.add(pDisabled, BorderLayout.SOUTH);
UIManager.LookAndFeelInfo[] plafs =
UIManager.getInstalledLookAndFeels();
for (UIManager.LookAndFeelInfo plafInfo : plafs) {
try {
UIManager.setLookAndFeel(plafInfo.getClassName());
JButton bEnabled = new JButton(plafInfo.getName());
pEnabled.add(bEnabled);
JButton bDisabled = new JButton(plafInfo.getName());
bDisabled.setEnabled(false);
pDisabled.add(bDisabled);
} catch(Exception e) {
e.printStackTrace();
}
}
JOptionPane.showMessageDialog(null, gui);
}
});
}
}
可替换地,在UIManager
调整值。
import java.awt.*;
import javax.swing.*;
class LookOfDisabledButton {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JPanel gui = new JPanel(new BorderLayout(3,3));
JPanel pEnabled = new JPanel(new GridLayout(1,0,2,2));
pEnabled.setBackground(Color.green);
gui.add(pEnabled, BorderLayout.NORTH);
JPanel pDisabled = new JPanel(new GridLayout(1,0,2,2));
pDisabled.setBackground(Color.red);
gui.add(pDisabled, BorderLayout.SOUTH);
// tweak the Color of the Metal disabled button
UIManager.put("Button.disabledText", new Color(40,40,255));
UIManager.LookAndFeelInfo[] plafs =
UIManager.getInstalledLookAndFeels();
for (UIManager.LookAndFeelInfo plafInfo : plafs) {
try {
UIManager.setLookAndFeel(plafInfo.getClassName());
JButton bEnabled = new JButton(plafInfo.getName());
pEnabled.add(bEnabled);
JButton bDisabled = new JButton(plafInfo.getName());
bDisabled.setEnabled(false);
pDisabled.add(bDisabled);
} catch(Exception e) {
e.printStackTrace();
}
}
JOptionPane.showMessageDialog(null, gui);
}
});
}
}
正如指出的克列奥帕特拉..
它不是一个解决方案,但可能是一个指针的方向寻找一个解决方案
这是我的答案。事实上,我怀疑她打了真正的原因与评论:
只能猜测:这是由于违反一个平台的规则。
我第二个猜测。
实际上,没有(虽然我在检查之前上传了,现在不能删除它:-) - 它看起来更像是一个来自不完整(?)平面设置的人工制品。正如你所看到的,即使启用的按钮看起来不对。具体来说:如果我按照原样运行示例,则看到与屏幕截图相同的示例。如果我改变它只设置金属(仅2按钮)所有看起来像预期 – kleopatra
@kleopatra我明白你的意思(这是一个相当意外的结果)。 (划痕头)任何想法,为什么它的行为?至于实际问题,我想它回到了SkeetOverFlow的好建议--OP应该发布一个SSCCE。 –
对于为什么只有猜测没有明确的想法:在这里,这是由于提炼一个平台的规则。然而,它是不稳定的:添加金属按钮作为最后一切都很好。这个例子的好处在于可以重现OPs效果_can_,再次如此:-) – kleopatra
'setEnabled(false)'不要从按钮中删除文本,你必须在你的代码中有一些其他的错误。 –
您可以发布SSCCE(http://sscce.org/),因为这是不寻常的。谢谢 – doNotCheckMyBlog
通常情况下,文本仍然存在,尽管灰色表示不同的阴影。你确定不是这样吗?如果是这样,你使用什么样的外观和感觉,或者如果你使用的是标准,你使用的是什么操作系统和窗口管理器? –