Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe einen zweigeteilten Frame. Oben ist ein Panel mit zehn Buttons. Ich habe ein Button-Array erzeugt und erzeuge diese Buttons über eine Schleife
Code:
private JButton[] buttons = new JButton[ 10 ];
private String[] buttontexte;
//...
for( int i = 0; i < buttontexte.length; i++ )
{
buttons[ i ] = new JButton( buttontexte[ i ] );
form.add( buttons[ i ] );
}
In dem unteren Panel ist ein Label. Je nachdem, über welchen Button die Maus fährt, soll im unteren Panel ein anderer Text erscheinen (z. B. der Buttontext).
Jedes Objekt der Klasse JComponent (und damit auch JButton, weil das eine Unterklasse davon ist) hat die Methode:
Code:
addMouseListener(MouseListener)
MouseListener ist ein Interface, wenn du nicht weisst was ein Interface ist, google mal danach.
Das mit den Listenern (Interfaces im Allgemeinen) ist zugegeben nicht das leichteste in Java, weil die Benutzung
z.T. doch recht unintuitiv ist.
Die obige Methode verlangt also so ein Interface "MouseListener".
Es gibt 2 Wege so einen MouseListener zu erstellen: einen etwas umständlicheren, und einen etwas schwer
nachvollziehbaren Der umständlichere ist der leichtere für einen Anfänger, musst halt n bisschen mehr schreiben.
Du machst dir eine Klasse, die das MouseListener Interface implementiert, und in dieser Klasse musst du dann alle
Methoden des Interfaces überschreiben.
Code:
public class MyListener implements MouseListener{
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
Jetzt suchst du dir die Methode raus, die du benutzen willst, das wäre also mouseEntered(), und schreibst
dort den Code rein, der ausgeführt werden soll, wenn man dieses Event auslöst. Da willst du jetzt
einen für den Button spezifischen Text ausgeben. Das heisst du gibst dieser Klasse so ein Attribut:
Code:
private String text;
und einen Konstruktor:
Code:
public MyListener(String text){
this.text = text;
}
Jetz kannste zB in der mouseEntered Methode diesen Text auf der Konsole ausgeben, oder eben
auf einem Label. In letzterem Fall muss diese Klasse dieses Label natürlich irgendwie kennen, d.h.
du könntest es auch mit im Konstruktor übergeben.
Jetzt haste deinen Listener, den hängste dann an einen button:
Code:
button.addMouseListener (new MyListener("Mein Text"));
Wenn jetz die Maus in diese Button reingeht, wird automatisch die mouseEntered() Methode aufgerufen
von dem Listener, den du ihm gegeben hast. Java weiss schon selber, wann es welches Event feuern soll,
also du braucsht dich da nich drum zu kümmern, es wird funktionieren.
Jetzt noch die schnellere Variante:
Code:
final String myText = "Hallo, das ist mein Text";
b.addMouseListener(new MouseListener() {
@Override
public void mouseEntered(MouseEvent e) {
deinLabel.setText(myText);
}
// die anderen Mouse-Methoden
});
Das ist halt ein etwas komisches Konstrukt, kann man halt so machen quasi on-the-fly. Der Unterschied
jetzt ist, dass dein Label sowie auch "myText" als "final" deklariert sein müssen. Das ist der Nachteil dieser
schnellen Variante.
Wichtig ist, dass du das auch wirklich verstehst. Wenn irgendwas unklar ist, frag lieber nochmal nach, statt
dass du den Code jetzt einfach kopierst und verwendest, ohne ihn zu verstehen.
Was ich noch nicht hinkriege: Wie kann ich den MouseListener am besten in der Schleife wie in meinem Beispielcode hineinschreiben, so dass er auf den entsprechenden Button reagiert beim Hovern, und wie frage ich dann ab, über welchem Button gerade die Maus ist? Gut wäre es noch, wenn der Index des Buttons zurückgegeben wird.
Also über welchem Button die Maus ist, musst du nicht abfragen, das weiss Java selber. Das ist
ja gerade das Konzept von Listenern : Sie lauschen automatisch permanent, was passiert, und wenn
deine Maus in den Button reinkommt, bemerkt java das und führt die mouseEntered() Methode aus.
Die rufst du nicht selber auf!
Und du kannst doch jedem Button deinen Listener geben in einer Schleife, wo ist das Problem?
Und mein Beispiel (egal welche Version) macht dir nen Listener, der einen Text ausgibt. Wenn du nun
den Index ausgeben willst, benutzt du halt statt einem Text den Index in der mouseEntered() Methode.