2017-02-25 11 views
0

JLabelを拡張して独自のButtonクラスを作成しています。 私の目標は、マウスがマウスの上を乗るとすぐにその背景を変更することです。これは私が得たものである ので:スウィング:ブール値がグローバルに変更されていません

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を投稿してください。

関連する問題