2017-02-25 62 views
0

我正在創建自己的Button類,擴展了JLabel。 我的目標是在鼠標懸停在其上方時立即更改其背景。 所以這是我得到:Swing:布爾值全局變化

public String st; 
public boolean hover = false, down = false; 

public Button() { 
    addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseEntered(MouseEvent e) { 
      System.out.println(hover); // false 
      hover = true; 
      System.out.println(hover); // true 
     } 
     @Override 
     public void mouseExited(MouseEvent e) { 
      System.out.println(hover); // true 
      hover = false; 
      System.out.println(hover); // false 
     } 
     @Override 
     public void mousePressed(MouseEvent e) { 
      down = true; 
     } 
     @Override 
     public void mouseReleased(MouseEvent e) { 
      down = false; 
     } 
    }); 
} 

@Override 
protected void paintComponent(Graphics g) { 
    g.setColor(mainColor()); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
} 

public Color mainColor() { 
    return down ? c1 : (hover ? c2 : c3); 
    // hover is always false 
} 

出於某種原因,布爾值將只有鼠標監聽器裏改變。 爲了讓事情更加令人困惑,幾乎相同的代碼在另一個類中工作得很好。

+0

「出於某種原因,布爾值只會在鼠標偵聽器內部發生變化。」這是什麼意思? –

+0

你可以編輯你的問題來顯示實際的課程嗎? –

+0

這是發佈一個適當的[mcve],當你問一個問題時,它可以證明問題,所以我們不必猜測你在做什麼。 – camickr

回答

1

您永遠不會在您的MouseListener代碼中調用repaint(),因此paintComponent()方法將不會被調用。

每當您更改自定義組件的屬性時,您需要調用repaint()以確保該組件被繪製爲新的狀態。

我正在創建自己的Button類,擴展了JLabel。

爲什麼要擴展JLabel來繪製背景?您應該擴展JPanel或JComponent。

如果您需要更多幫助(以及將來當您提出問題),請發佈適當的MCVE來證明問題。