Wie zu sagen, welches Element ausgelöst ein Maus-listener
HALLO alle,
Ich bin versucht, zu schreiben eine einfache Sterne-Bewertung Komponente. Ich bin ziemlich neu in der Java-Sprache, und ich bin mir nicht sicher, ob das, was ich erreichen will, kann selbst erfolgt in Java. Ist es möglich, mir noch ein JLabel innen ein array von JLabel, und jedes JLabel in das array ein Maus-Ereignis-listener. Jetzt ist es möglich es so einrichten, dass, wenn das Maus-event feuert auf sagen Label[3], dass ich den index Wert der it?
Hier ist, wie ich meine gebaut Panel
public Rating(Integer max,int size) {
JLabel position = new JLabel[max];
this.setLayout(new FlowLayout());
for(int i=0; i != max;i++){
position[i]=new JLabel(icons.getIcon("star-empty", size));
position[i].setOpaque(true);
position[i].addMouseListener(this);
add(position[i]);
}
}
@Override
public void mouseEntered(MouseEvent e) {
JLabel a= (JLabel) e.getComponent();
//****Have some code in here to tell me where in the position array the event came from????***
int index = ?????
}
Gedanken/Idee/Vorschläge bitte.
Hinweis: ich dachte, der Verwendung von Tasten, aber es sieht chaotisch und würde gerne einen Weg finden, mit ImageIcons.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstelle der Verwendung der gleichen listener für jedes label, wie du es getan hast:
...können Sie erstellen eine spezielle listener-Klasse, nimmt der index-Nummer, und erlaubt Ihnen, es zu finden höher:
Jedes Etikett wird eine separate Instanz der listener mit einer anderen index-Wert. Der code für die innere Klasse Aussehen würde, so etwas wie dieses:
Dann, Sie einfach überschreiben-Methode in MouseAdapter.
Auch, wie andere Leute sagten, Sie möchten möglicherweise verwenden Sie
JButton
s stattJLabel
s, weil Sie haben eine bessere Unterstützung für Aktionen. Sie können immer noch geben Sie Symbole.Könnten Sie den Namen jedes JLabel nach Ihrem index, mithilfe dessen die setName-Methode, dann verwenden Sie die MouseEvent-der getComponent Methode, um den Ursprung JLabel zurück, verwenden getName drauf und es ist Ihr index. Das wäre eine Möglichkeit, aber würde die Speicherung der index-Informationen an zwei stellen (implizit in seiner Platzierung im array, und explizit wie der label-name), es ist also ziemlich viel betteln für die Inkonsistenz entstehen.
Könnte man auch die Suche durch die JLabel-array für die Referenz, die Sie erhalten, aus getComponent, aber das ist nicht so toll, vor allem für große arrays.
Die Art, wie ich normalerweise tun ist:
nun
position[i]
ist die Beschriftung, die Sie suchen.Weiß nur, dass JButtons können Aussehen, wie Sie möchten. Sie können ImageIcons und haben nicht einmal Aussehen wie Schaltflächen.
Warum ist der index wichtig? Sie wissen, wie man die Komponente, also einfach eine Schleife über das array, um den index.
Wie funktioniert über einen button lösen das problem der Bestimmung des index? Jedoch, ich Stimmen auch mit Hilfe einer Schaltfläche ist besser als ein label und dann würden Sie einen ActionListener anstatt einen MouseListener. Sie können die Taste, die Aussehen wie ein label mithilfe:
Nun, wenn Sie ein ActionListener können Sie die setActionCommand (...) - Methode zum speichern der index-Wert der Taste. Dann in der Veranstaltung, die Sie Nutzung der getActionCommand (...) - Methode.