JLabels in schleife erzeugen mit verschiedenen namen?

JavaOHJA

Mitglied
hey, ich erstelle mehrere labels in einer schleife und möchte listener auch gleich adden, das geht aber nur wenn ich den labels verschiedene namen gebe, geht so was?

hier die schleife
Java:
for (int i = 0; i < zahlen.length; i++) {
			JLabel name = new JLabel(""+zahlen[i]);
			
						
			spielFeld.add(name);
			
		}

hab schon gelesen man kann es mit einem array schaffen und dann über den array index die einzelnen labels ansprechen, leider weiß ich auch damit nicht wie ich listener hizufügen kann (habs nicht hinbekommen)

wäre cool wenn jemand eine lösung für mich hätte.

Mit freundlichen Grüßen

JavaOHJA
 
Label erzeugen

Java:
JLabel[] labels =  new JLabel[10]

for(int i = 0;  i < labels.length; i + + ) {
  labels [i] = new JLabel ();
}

Du kannst nunjedes label anhand der Indizes ansprechen z.b

Java:
labels[2].setText ("Hallo welt");


Odee für alle label

Java:
for(JLabel label : labels){
  label.setText("for-each loop");
}
Warum willst du aber einem jlabel listener hinzufügen ?

Da ich vom Handy aus Scheibe darfst du Schreibfehler gerne behalten 😉
 
Zuletzt bearbeitet:
Hi,
Du kannst einen eigenen MouseListener schreiben und für jedes label im For-loop ein MouseListener registrieren.
In etwa so: (diese Klasse: MyMouseListener ist in der selben Klasse, in der du die Labels erzeugst)
Java:
    private class MyMouseListener implements MouseListener {

		@Override
		public void mouseClicked(MouseEvent e) {
			System.out.println(((JLabel)e.getSource()).getText() + " wurde geklickt");		
		}

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}
    }
}

Dann im for- Loop:
Java:
private static final int MAX_LABELS = 10;
...
JLabel[] labels = new JLabel[MAX_LABELS];
int counter = 1;
for (JLabel jLabel : labels) {
	jLabel = new JLabel("Label " + counter++);
	jLabel.addMouseListener(new MyMouseListener());
	add(jLabel);
}
so wird beim Click auf das jeweilige Label der Text: "Label n wurde geklickt" auf der Console ausgegeben.
gruss knilch
 
Zuletzt bearbeitet:
Wenn es anklickbar sein soll, würde ich eher einen JButton empfehlen, ich finde das praktischer als mit dem MouseListener. So kannst du dann über den ActionListener gehen:
Java:
JButton button = new JButton("Klick!");
button.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent evt) {
    // Button wurde geklickt!
  }
});
spielFeld.add(button);
 

Neue Themen


Zurück
Oben