JPanels in Schleife erstellen / Unterschiedliche Events

TimN

Erfahrenes Mitglied
Hallo,

ich möchte mehrere JPanels in einer for-Schleife erstellen. Das Funktioniert auch ganz gut soweit. Aber ich will verschiedene Aktionen ausführen wenn auf eines der Panels geklickt wird. (Die Panels sind zur Farbauswahl. Also soll bei jedem Panel eine andere Farbe ausgewählt werden). Wie kann ich das aber in der Schleife realisieren? Kann ich innerhalb der mouseClicked-Methode irgendwie auf das jeweilige Panel zugreifen?

Code:
    for (int i = 0; i < 5; i++) {
         JPanel colorPanel = new JPanel(null);
         colorPanel.setBounds(10 + i*30, 20, 20, 20);
         colorPanel.setBackground(colors[i]);
         colorPanel.addMouseListener(new MouseAdapter() {
             public void mouseClicked(MouseEvent e) {
                 // event
             }
         });
         cp.add(colorPanel);
    }

Gruß, Tim
 
Hi,
schreibe doch einfach 5 Klassen und erstelle einen Array:

Java:
public class MouseAdapter1 extends MouseAdapter{
 @Override public void mouseClicked(MouseEvent e){
    System.out.println("Dies ist MouseHandler Nr 1");
  }
}

Java:
public class MouseAdapter2 extends MouseAdapter{
 @Override public void mouseClicked(MouseEvent e){
    System.out.println("Dies ist MouseHandler Nr 2");
  }
}

Uns so weiter ...

Und so sieht die Schleife aus:
Java:
    ArrayList<MouseAdapter> handlers = new ArrayList<MouseAdapter>();
    handlers.add(new MouseHandler1());
    handlers.add(new MouseListener2());
    //[...]
    for (int i = 0; i < 5; i++) {
         JPanel colorPanel = new JPanel(null); // Was soll das hier? Lasse den Parameter doch weg!
         colorPanel.setBounds(10 + i*30, 20, 20, 20);
         colorPanel.setBackground(colors[i]);
         colorPanel.addMouseListener(handlers.get(i));
         cp.add(colorPanel);
    }

Ciao
DosCoder
 
Zuletzt bearbeitet:
Wenn ich das richtig verstanden habe, möchtest du irgendwas mit der Farbe anstellen, die das JPanel hat! Demnach könntest du folgenden Code schreiben:

Code:
    for (int i = 0; i < 5; i++) {
         JPanel colorPanel = new JPanel();
         colorPanel.setBounds(10 + i*30, 20, 20, 20);
         colorPanel.setBackground(colors[i]);
         colorPanel.addMouseListener(new MeinMausListener(colorPanel);
         cp.add(colorPanel);
    }

Dazu schreibst du dir eine Klasse:

Java:
package appl;

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JPanel;

public class MeinMausListener implements MouseListener {

	private JPanel meinPanel;
	
	public MeinMausListener(JPanel panel) {
		this.meinPanel = panel;
	}
	
	public void mouseClicked(MouseEvent e) {
		
		Color color = meinPanel.getBackground();
		
		//und jetzt tu das mit color, was du mit dieser Farbe machen wolltest!
		
	}

	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}

}

Soweit mein Lösungsvorschlag...
 
Zuletzt bearbeitet:
Zurück