Welcher Listener für JLabel?

Status
Nicht offen für weitere Antworten.

Marie Curie

Aktives Mitglied
Hallo zusammen,

ich hab mehrere Labels, die per Mausklick eine Methode ausführen sollen.
Ein ActionListener ist bei Labels nicht anwendbar, also welchen Listener muss ich anwenden?

Danke für eure Antworten!

Liebe Grüße
Marie
 
merlin2 hat gesagt.:
Einen MouseListener.

Danke, funktioniert super!

Hab aber noch ne Frage:
Die Labels, die ich oben angesprochen habe, werden durch eine Schleife hinzugefügt.
Durch diese Labels werden Suchergebnisse angezeigt, Anzahl der Labels ist abhängig wieviel
Suchergebnisse vorliegen.

Um eines der Suchergebnisse anzuzeigen, soll es farblich von den Anderen unterschieden werden. Das mache ich folgendermaßen:

Code:
    public void anzeigen() {

        javax.swing.JPanel neuesPanel = new javax.swing.JPanel();

    	int anzahlErgebnisse = ergebnisse.size();
    	if(anzahlErgebnisse <= 1){
    		dispose();
    	}
    	else{
    		for(int i = 0; i <= anzahlErgebnisse - 1; i++){
    		
    			inneresPanel.setLayout(new BoxLayout(inneresPanel, BoxLayout.PAGE_AXIS));
    			einLabel = new javax.swing.JLabel();
    		
    			Object einDatensatz = (ergebnisse.get(i));

    			final String kdnr = String.valueOf(((DBDatensatz) einDatensatz).getkdNr());
    			String name = String.valueOf(((DBDatensatz) einDatensatz).getName());
    			System.out.println("Kundennummer:" + kdnr + " " +  "Kundenname: "+ name);
    			einLabel.setText("Kundennummer:" + kdnr + " " +  "Kundenname: "+ name);
    			einLabel.addMouseListener(new MouseListener(){

					public void mouseClicked(MouseEvent e){
						String selektierteNr = kdnr;
						setGeklickteNr(selektierteNr);
					}

					public void mouseEntered(MouseEvent e){
						einLabel.setForeground(Color.RED);
					}

					public void mouseExited(MouseEvent e){
						einLabel.setForeground(Color.BLACK);
					}

					public void mousePressed(MouseEvent e){
						einLabel.setForeground(Color.WHITE);
					}

					public void mouseReleased(MouseEvent e){
					}
    				
    			});
    			inneresPanel.add(einLabel);
    		}
        }
    	pack();
    }

Leider wird aber dadurch nur das letzte Suchergebniss farblich unterschieden.
Hat jemand vielleicht eine Lösung dafür?

Ich denke es liegt daran, dass jedes Label praktisch den gleichen Namen hat und deswegen der Listener nur für das letzte Label funktioniert...

ich hoffe es war verständlich :roll:

liebe Grüße,
Marie
 
Ganz einfach: Du musst "einLabel" umbenennen in "mehrereLabels" :lol:

Neee, also, "einLabel" ist im Moment wohl eine Variable in der Klasse - und der kann immer nur EIN Label zugewiesen sein (wie der Name schon suggeriert :wink: ). Wenn du dort mehrere Labels anlegen willst, musst du die Variable lokal deklarieren. Und damit man aus dem anonymen Listener darauf zugreifen kann, muss sie final sein.

Wenn du die Zeile
Code:
einLabel = new javax.swing.JLabel();
änderst in
Code:
final JLabel einLabel = new javax.swing.JLabel();
sollte es schon gehen.
 
Danke, du bist mein Held für den heutigen Abend :wink:

hat super funktioniert! Danke für deine Hilfe!

Liebe Grüße
Marie
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben