我正在用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
通常情況下,文本仍然存在,儘管灰色表示不同的陰影。你確定不是這樣嗎?如果是這樣,你使用什麼樣的外觀和感覺,或者如果你使用的是標準,你使用的是什麼操作系統和窗口管理器? –