.gif-Bild wird bei mouseEntered nicht angezeigt

Maddin

Mitglied
Huhu und erstmal Hi an alle :)

Erst mal wollte ich dem Forum und den Usern hier ein großes Lob aussprechen!
Hab mich bei Problem schon oft hier wiedergefunden und fast immer die Lösung gefunden.. also Danke


So, nun bin ich grad neu registriert und hab schon n Problem für euch..

Das sieht aus wie folgt (ich beschränk mich mal auf das Wesentliche..):
Mein Programm hat einen Button mit einem MouseListener. Der Button hat standardmäßig einen unanimierten Icon gesetzt, welcher allerdings bei Bewegen der Maus auf den Button (also mouseEntered) in einen .gif-Button geändert wird.
Klappt theoretisch auch alles, lässt sich schön überprüfen, dass die Icons richtig gesetzt werden etc.
Knackpunkt daran ist nun, dass der Icon nicht angezeigt. Dies geschieht nur dann, wenn der Icon animiert ist, bei einem unbewegten würde es prima klappen.
Wenn man das Zurücksetzen (auf den unbewegten Icon) bei mouseExited weglassen würde, so würde der animierte Icon angezeigt werden, sobald man die Maus vom Button entfernt.
Ich könnt mir vorstellen, dass es was mit dem automatischen Hervorheben des Buttons von Java zu tun hat, wollte aber erst mal hier nachfragen, ob evtl. jmd das selbe Problem hat oder eine Idee, wie sich das lösen ließe (Am besten wär's natürlich, wenn sich das Neuschreiben der Button-Klasse vermeiden ließe).

noch ein bisschen Code:
Java:
String pfadProgrammStart = getClass().getResource(".").getPath().substring(1); //Pfad holen, von dem aus das Programm gestartet wurde

ImageIcon vorherigeIcon = new ImageIcon(pfadProgrammStart + "pfeil_l.png"); //der normale Icon
ImageIcon vorherigeIconAnimiert = new ImageIcon(pfadProgrammStart + "pfeil_l_animiert.gif"); //Icon bei Maus auf Button - animiert

JButton jButtonVorherige = new JButton(); //Erzeugung des Buttons
jButtonVorherige.setText("Vorherige Person"); //Text setzen
jButtonVorherige.setIcon(vorherigeIcon); //Icon setzen
jButtonVorherige.setVerticalTextPosition(AbstractButton.BOTTOM);
    //Text in der Vertikalen unten anordnen, sodass der Icon links vom Text ist

jButtonVorherige.addMouseListener(new MouseListener() {
//MouseListener hinzufügen -> Button soll sich bei Mausbewegung über dem Button ändern
	@Override
	public void mouseEntered(MouseEvent arg0) { //Maus bewegt sich auf den Button
		jButtonVorherigeMouseEntered(); //entsprechende Methode aufrufen
	}
	@Override
	public void mouseExited(MouseEvent arg0) { //Maus wieder vom Button weg
		jButtonVorherigeMouseExited(); //-> entsprechende Methode
	}
	@Override
	public void mouseClicked(MouseEvent arg0) {}
	@Override
	public void mousePressed(MouseEvent arg0) {}
	@Override
	public void mouseReleased(MouseEvent arg0) {}
 });

public void jButtonVorherigeMouseEntered() {
	jButtonVorherige.setIcon(vorherigeIconAnimiert);
        //Icon wird zwar richtig gesetzt, wird aber während der Maus auf dem Button nicht angezeigt
}
public void jButtonVorherigeMouseExited() {
	jButtonVorherige.setIcon(vorherigeIcon); //wieder zurücksetzen
}

Auf Wunsch kann ich auch eine lauffähige Version posten.


Danke schon mal im Voraus fürs Anschaun und die Hilfe


Gruß,
Martin
 
Zuletzt bearbeitet:
Moin!
Mit deiner Vermutung liegst du schon ganz richtig. Der sogenannte RollOverState des Button ist per Default aktiv.
Du könntest
Code:
jButtonVorherige.setRollOverEnabled(false);
setzen, dann würde dein Code auch funktionieren. Viel einfacher wäre es aber, du würdest deinen MouseListener Code weglassen, und das animierte Icon über
Code:
jButtonVorherige.setRolloverIcon(vorherigeIconAnimiert);

setzen.

*grüssle*
 
Hi Artorius,

Danke für die Antwort.
Deine Lösungen haben beide perfekt funktioniert und sind noch dazu um einiges einfacher als meine Lösungsansätze.. Wunderbar, Danke!

Sieht bei mir jetzt so aus:
Java:
String pfadProgrammStart = getClass().getResource(".").getPath().substring(1); //Pfad holen, von dem aus das Programm gestartet wurde
 
ImageIcon vorherigeIcon = new ImageIcon(pfadProgrammStart + "pfeil_l.png"); //der normale Icon
ImageIcon vorherigeIconAnimiert = new ImageIcon(pfadProgrammStart + "pfeil_l_animiert.gif"); //Icon bei Maus auf Button - animiert
 
JButton jButtonVorherige = new JButton(); //Erzeugung des Buttons
jButtonVorherige.setText("Vorherige Person"); //Text setzen
jButtonVorherige.setIcon(vorherigeIcon); //Icon setzen
jButtonVorherige.setVerticalTextPosition(AbstractButton.BOTTOM);
    //Text in der Vertikalen unten anordnen, sodass der Icon links vom Text ist
jButtonVorherige.setRolloverIcon(vorherigeIconAnimiert); //Die Lösung - Icon wird bei Rollover auf den animierten Icon gesetzt


Gruß,
Martin
 

Neue Beiträge

Zurück