2015-02-12 23 views
3

Java提供了一個簡單的方法,用button.setEnabled(false);設置的JButton無法點擊但不變灰

但是這樣做會變灰整個按鈕從而影響對殘疾人按鈕上的文本和圖像的可見性,以禁用其按鈕。

問題:在Java中是否有任何可用的方法/方法允許按鈕被禁用但不灰掉?

當然,我不希望手動調整按鈕的ActionListener來實現這一點。

+0

你會如何直觀地證明按鈕被禁用?您可以實現自己的外觀和感覺,並改變禁用狀態的繪製方式... – MadProgrammer 2015-02-12 01:52:22

+0

最難的問題是setDisabledIcon還能夠在按鈕上顯示文本。 – user3437460 2015-02-12 02:02:07

+0

但是,您可以使用禁用的圖標圖形覆蓋默認圖標,並自行管理狀態。下面更詳細地寫出解決方案。 – 2015-02-12 02:28:19

回答

2

公司花費數百萬美元開發UI可能很常見,可供所有用戶使用。

用戶如果知道該按鈕被禁用(如果沒有可視指示),該怎麼辦?

我不希望手動調整按鈕的ActionListener來實現這一點。

爲什麼?這種方法有什麼問題?這比爲您的代碼運行的所有平臺創建自定義LAF要好。

反正(咆哮完了),你可以使用自定義ButtonModel的:

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

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

應適用於所有的LAF的和按鈕將不會被畫成一個壓(我想不僅僅是去除的ActionListener更好)。

0

這是一個小小的工作,可能不是最好的編碼風格或解決方案,但它可能會滿足您的要求。我會假設你有一個圖標,當按鈕被啓用時,另一個不是。

基本上,爲按鈕創建和管理自己的虛擬「禁用」狀態(但不要觸摸內置的啓用或disabledIcon方法)。

在管理啓用/禁用的代碼中,當您禁用「虛擬」時,將常規圖標(setIcon())設置爲禁用的圖標圖形,並設置布爾值以反映虛擬「禁用」按鈕。 當您「啓用」時,使用setIcon()返回默認圖標,並將布爾值設置爲反映「已啓用」。

然後,單擊按鈕時,在ActionListener中,可以檢查布爾值,如果布爾值表示虛擬狀態爲「禁用」,則不執行任何操作。