2010-08-02 39 views
0

我想覆蓋java.awt.Component中的isEnabled()方法,並將其與JTextArea一起使用。如何重寫JTextArea isEnabled()方法

這就是我所做的。

此代碼片段在Jframe構造函數中調用。

jTextArea1 = new javax.swing.JTextArea(){ 
     @Override 
     public boolean isEnabled(){ 
      if(getForeground()== new Color(0, 0, 0)){ 
       return true; 
      } 
      return false; 
     } 

    }; 

而且當鼠標點擊jTextArea1後面的函數被調用。

private void jTextArea1MouseClicked(java.awt.event.MouseEvent evt) { 
    if (jTextArea1.isEnabled()) { 
     jTextArea1.setForeground(Color.GRAY); 
     jTextArea1.revalidate(); 
     System.out.println("gray"); 
    } else { 
     jTextArea1.setForeground(Color.BLACK); 
     jTextArea1.revalidate(); 
     System.out.println("black"); 
    } 
} 

我正在使用netbeans IDE,因此actionlisteners是自動生成的。

我這樣做的原因是,我想改變鼠標光標,當它超過jTextArea1。如果我簡單地使用setEnabled()方法,當jTextArea1處於「未啓用」狀態時,不會更改光標。因此,這種方式將使jTextArea1始終處於「啓用」狀態,但會在鼠標單擊時啓用和禁用視覺外觀。如果調用了isEnabled()函數,它將假裝單擊鼠標時啓用狀態發生更改。

我的問題是它沒有給我期待的輸出。我最初將文本前景色設置爲非黑色(灰色)。當點擊鼠標時,顏色不會變爲黑色。它打印「黑色」。

回答

1
getForeground() == new Color(0, 0, 0) 

沒有辦法getForeground()是要準確地返回相同的對象,你有新的RHS創建。

通常,似乎沒有必要重寫一個方法,甚至不需要文本組件的子類。保持其他地方的狀態。

(也jTextArea1是不是一個偉大的名字。)

+0

哦..一個愚蠢的錯誤..打擾你們這個真的很抱歉。我應該使用equals()而不是equals運算符。 謝謝湯姆。 :) – Niroshan 2010-08-02 12:25:49