Wenn du JLabels benutzt, musst du daran jeweils einen MouseListener registrieren und die mousePressed() oder mouseClicked()-Methode überschreiben. Bei Verwendung eines MouseAdapters brauchst du nicht alle Methoden des Listeners überschreiben, nur die, die dich interessieren.
Wenn du etwas sehr gleichartiges tun möchtest bietet sich eine eigene Klasse an. Entsprechent parametrisierte Instanzen dieser Klasse setzt du dann als Listener.
Bei völlig unterschiedlichen Aufgaben kannst du anonyme innere Klassen als Listener einhängen.
Du kannst das MouseEvent nach seiner Quelle (in deinem Fall JLabel) fragen. Du bekommst dann die Referenz auf die Instanz zurück, die das Ereignis ausgelöst hat. Damit ist eine klare Unterscheidung möglich.
Ich programmiere ein Spiel als einführung in Java (hab FR begonnen) und benutzte dummerweise nur eine Klasse weil ichz net kapier wie man es amchen sol und was es bringt und vor allem wie man die zusammenhängend zusammenbringt usw..
Kann mir einer genauer sagen wie ich MouseListener und so machen soll?
Okay - also einfach drauf losprogrammieren ist mit Sicherheit das fälscheste was du machen kannst. Vor allem gleich mit Oberflächen anfangen, wo du noch nicht einmal das Grundlegendste beherrscht. Ich rate dir: verwerfe all deine Pläne, fange mal mit einem ganz einfach (um bei deinem Genre zu bleiben - auch wenn ich nix davon halte, Geschmackssache) mit einem Konsolenspiel an. Also Terminal - textbasierend.
Du scheinst aber das OOP Konzept noch nicht zu verstehen und GUI Programme (insbesondere Spiele) sind nicht geeignet um die essentiellen Konzepte zu erlernen.
Wenn du einem Frame einen MouseListener verpasst, lauscht nur der Frame, wenn auf ihm herumgeklickt wird. Die Labels bekommen davon nichts mit. In deinen anderen Threads hast du ja gesagt, dass du JLabels verwendest, um die Bilder anzuzeigen.
Hier mal ein möglicher Quelltext für alle deine bisherigen Fragen:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestGUI extends JFrame {
private JLabel[] labels;
public TestGUI(String title) {
super(title);
setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyMouseListener listener = new MyMouseListener();
JPanel labelPanel = new JPanel(new GridLayout(11, 0));
add(labelPanel, BorderLayout.CENTER);
labels = new JLabel[121];
for(int i = 0; i < labels.length; i++) {
labels[i] = new JLabel(String.valueOf(i+1));
labels[i].setHorizontalAlignment(SwingConstants.CENTER);
labels[i].addMouseListener(listener);
labelPanel.add(labels[i]);
}
}
class MyMouseListener extends MouseAdapter {
// Beispiel für die erste Reihe (1 - 11)
public void mouseClicked(MouseEvent e) {
Object source = e.getSource();
if(source == labels[0]) {
System.out.println(labels[0].getText());
}
else if(source == labels[1]) {
System.out.println(labels[1].getText());
}
else if(source == labels[2]) {
System.out.println(labels[2].getText());
}
else if(source == labels[3]) {
System.out.println(labels[3].getText());
}
else if(source == labels[4]) {
System.out.println(labels[4].getText());
}
else if(source == labels[5]) {
System.out.println(labels[5].getText());
}
else if(source == labels[6]) {
System.out.println(labels[6].getText());
}
else if(source == labels[7]) {
System.out.println(labels[7].getText());
}
else if(source == labels[8]) {
System.out.println(labels[8].getText());
}
else if(source == labels[9]) {
System.out.println(labels[9].getText());
}
else if(source == labels[10]) {
System.out.println(labels[10].getText());
}
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
new TestGUI("TestGUI").setVisible(true);
}
}
Mit dabei ist die Auswertung der Mausereignisse für die Label 1 - 11. In der Konsole wird der Text des geklickten Labels ausgegeben. Am einfachsten ist für diesen Lösungsvorschlag, wenn deine Bilder nur Nummern als Namen tragen und dem jeweiligen Label aus dem Array als Icon zugewiesen werden.
Statt String.valueOf(i+1) müsste dann etwas in der Art geschrieben werden:
Code:
labels[i] = new JLabel(new ImageIcon(String.valueOf(i)+".jpg"));
Da kann man getielter Meinung sein. Vielleicht ist es für einen Anfänger ein "Overkill", aber Swing verwendet ja Vererbung, Polymorphie und Interfaces bis zum Erbrechen ... da stellt sich dann wenigstens nicht die Frage, wofür man das alles braucht :wink: