# Buttons Mouse-Over Effekt



## Dit_ (26. Okt 2009)

Hallo!

Ich habe ein Paar Buttons ohne "Border" und will dass meine Buttons sich ändern (so wie zB in FireFox Browser), wenn ich mit dem Mouszeiger auf diese zeige. 
Weiss jemand wie ich das hinkriegen kann?

Brauche ich dafür MouseListener ? wenn ja, dann soll nur die methode *mouseEntered(MouseEvent e) * in Frage kommen, weiter weiss ich nicht 

Danke schon mal.


----------



## eRaaaa (26. Okt 2009)

also es gibt

```
void	setRolloverEnabled(boolean b) 
          Sets the rolloverEnabled property, which must be true for rollover effects to occur.
 void	setRolloverIcon(Icon rolloverIcon) 
          Sets the rollover icon for the button.
```

um beispielsweise das icon zu ändern,
ansonsten müsste das auch so gehen wie du gesagt hast, mouseEntered und dort dann eigenen border malen, farbe ändern etc. und bei mouseExited halt wieder auf def werte setzen ?!


```
button.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseExited(MouseEvent e) {
				//....

			}

			@Override
			public void mouseEntered(MouseEvent e) {
				//....

			}

		});
```


----------



## Dit_ (26. Okt 2009)

ok so funktionierts


```
final JButton einfuegen = new JButton("Einfügen");
			einfuegen.setBorder(Konstanten.KEIN_BORDER);
			einfuegen.addMouseListener(new MouseListener() {
				
				@Override
				public void mouseReleased(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}
				
				@Override
				public void mousePressed(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}
				
				@Override
				public void mouseExited(MouseEvent e) {
					if (e.getComponent().equals(einfuegen)){
						einfuegen.setBorder(Konstanten.KEIN_BORDER);
					}
					
				}
				
				@Override
				public void mouseEntered(MouseEvent e) {
					if (e.getComponent().equals(einfuegen)){
						einfuegen.setBorder(BorderFactory.createRaisedBevelBorder());
					}
					
				}
				
				@Override
				public void mouseClicked(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}
			});
```


Frage jetzt

ich habe 10 Buttons muss ich denn jetzt für alle extra MouseListener erstellen ?


----------



## eRaaaa (26. Okt 2009)

nein, du musst ja nicht umbedingt eine innere klasse benutzen.

deine klasse kann ja das interface [c]MouseListener implementieren[/c] oder [c]MouseAdapter erweitern[/c].(falls noch von keiner anderne klasse geerbt wird, oder halt eine eigene klasse dafür schreiben)

dann kannst du einfach bei deinen buttons sagen: 

[c]addMouseListener(this); [/c] (oder halt (new MyOwnMouseListener()).. oder wie auch immer.


----------



## Dit_ (26. Okt 2009)

ok angenommen ich erstelle extra Klasse MyListener, diese extra Klasse kennt aber meine Buttons nicht und die brauche ich ja in der *mouseEntered* Methode.


----------



## eRaaaa (26. Okt 2009)

wieso kennt sie die nicht?

```
public class MyOwnListener extends MouseAdapter {
	

	@Override
	public void mouseEntered(MouseEvent e) {
		JButton button = (JButton)e.getSource();
		button.setBorder(.....); //....
	}

	@Override
	public void mouseExited(MouseEvent e) {
		JButton button = (JButton)e.getSource();
		button.setBorder(null); //or whatever ...
	}


}
```

und in deiner anderen klasse ganz normal

```
MyOwnListener listener = new MyOwnListener();
		button.addMouseListener(listener);
button2.addMouseListener(listener);
```


----------



## Dit_ (26. Okt 2009)

axoo!

ok den trick kannte ich nicht 

Danke Sehr!


----------



## Dit_ (26. Okt 2009)

noch ne Frage. 

ok so kann ich meine Buttons beeinflussen.


```
public class MyOwnListener extends MouseAdapter {
    
 
    @Override
    public void mouseEntered(MouseEvent e) {
        JButton button = (JButton)e.getSource();
        button.setBorder(.....); //....
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
        JButton button = (JButton)e.getSource();
        button.setBorder(null); //or whatever ...
    }
 
 
}
```

wie kann ich aber den Mauszeiger ändern zB mit 
	
	
	
	





```
...setCursor(Cursor.HAND_CURSOR);
```


----------



## eRaaaa (26. Okt 2009)

ich hab das noch nie gebraucht, aber laut API sollte das doch wie folgt gehen

```
button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
```

/edit: aber hat das noch was mit dem listener zu tun? ;/ den kann man doch auch so, innerhalb deiner anderen klassen, da wo du den button erstellst, setzen, oder nicht?


----------

