2015-10-19 62 views
0

所以,我想要做的是一個帶有文本的按鈕。Java:按鈕上的文字在鼠標事件消失後改變其顏色

當用戶將鼠標懸停在按鈕上時,文本顏色會從基本顏色(bcolornorm)更改爲懸停顏色(bcolorhover)。點擊後,它會從bcolorhover更改爲bcolorclic。

但是,發生的事情是,在懸停時,文本消失(我假設顏色設置爲空),並且不管我做什麼都不會再出現。

下面的代碼:

窗口類:http://pastebin.com/Pcp0Ztks
Button類:http://pastebin.com/438Jf33m

工作原理:

有一個名爲bcolor變量是基於mouseEvents改變。

初始化時,它採用bcolornorm的值,然後根據mouseEvents採用bcolornorm,bcolorhover或bcolorclic的值。

然後使用g2d.setColor(bcolor)設置顏色。

我試過在變量中刪除「this」,但它不起作用。老實說,我不能想到爲什麼bcolor被設置爲null,並且沒有考慮其他變量的值。

任何人都有解決方案嗎?謝謝:)

+0

呃...按鈕類代碼似乎表明,三個'bcolor ...'確實沒有初始化。 – Deltharis

+0

哪些? Eclipse沒有指示任何東西。 – Zezombye

+0

它應該,真的。檢查構造函數,你沒有以任何方式使用它的參數。 – Deltharis

回答

0

使用paintComponent繪製按鈕的顏色不是一個好習慣。這是一項昂貴的操作。

我會建議使用button.setBackgroundColor(yourColor)。這樣,您甚至不必費心使用g2d.drawString()來繪製按鈕文本。

僅供參考,您根本沒有使用構造函數參數。下面適用於我:

public class Bouton extends JButton implements MouseListener{ 
public Bouton(String str, Color bcolornorm, Color bcolorhover, Color bcolorclic){ 
    super(str); 
    this.name = str; 
    this.bcolornorm = bcolornorm; 
    this.bcolorhover = bcolorhover; 
    this.bcolorclic = bcolorclic; 
    this.setBackground(this.bcolornorm); 
    this.addMouseListener(this); 
} 
private String name; 
public Color bcolornorm; 
public Color bcolorhover; 
public Color bcolorclic; 


public void mouseClicked(MouseEvent event) {} 

public void mouseEntered(MouseEvent event) { 
    this.setBackground(this.bcolorhover); 
} 
public void mouseExited(MouseEvent event) { 
    this.setBackground(this.bcolornorm); 
} 
public void mousePressed(MouseEvent event) { 
    this.setBackground(this.bcolorclic); 
} 
public void mouseReleased(MouseEvent event) { 
    this.setBackground(this.bcolorhover); 
} 
} 
+0

Oooh是啊,我完全忘了做這個.bcolornorm = bcolornorm等等。做完這個之後它完美的工作,謝謝:D至於paintComponent,它是在openclassroom的教程中,所以我猜測它是必需的。 – Zezombye