In meiner Klasse möchte ich JPANel andere Mainstream JPanel obj dynamisch innerhalb einer Unterklasse erstellt und Trap-Maus Ereignisse genau wissen, ob sie es erzeugen. Ich versuche, dies zu tun, indem ich eine Unterklasse DoSquare (JPanel erweitern), Listener, erstellen Objs und zeichnen Grafiken dieser Unterklasse, aber wenn ich Programm und klicken Sie auf eine der DoSquare Obj erstellt, die e.getSource() immer zurück das SubObj-Objekt anstelle des angeklickten Elements. Wie kann ich die in Listener-Events ausgewählte Komponente genau unterscheiden?Java-Trap-Ereignisse aus Subklassen Obj
Hier mein Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SubObj extends JPanel {
Listener listener = new Listener();
DoSquare firstQ = new DoSquare(100, 50);
DoSquare secondQ = new DoSquare(200, 70);
public static void main(String[] args) {
JFrame panel = new JFrame();
SubObj content = new SubObj();
panel.setContentPane(content);
panel.setFocusable(true);
panel.setSize(400, 400);
panel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setVisible(true);
}
SubObj() {
addMouseListener(listener);
addFocusListener(listener);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
firstQ.draw(g, Color.BLACK);
secondQ.draw(g, Color.CYAN);
}
private class DoSquare extends JPanel {
private int coordX;
private int coordY;
Listener squareLis = new Listener();
DoSquare(int X, int Y) {
addMouseListener(squareLis);
addFocusListener(squareLis);
coordX = X;
coordY = Y;
}
void draw(Graphics g, Color c) { // Draw the square
g.setColor(c);
g.fillRect(coordX, coordY, 50, 50);
}
}
public class Listener implements MouseListener, FocusListener {
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
System.out.println(e.getSource());
}
public void mouseReleased(MouseEvent e) {}
public void focusGained(FocusEvent e) {}
public void focusLost(FocusEvent e) {}
}
}
Vielen Dank im Voraus
AM
Hallo danke für deine Antwort, ich versuche, den Hörer zu ändern, wie Sie vorschlagen, aber das Ergebnis nicht ändern. – AleMal
@almal Es funktioniert, versuche meinen aktualisierten Code. –
Großartig, es funktioniert! Danke noch einmal – AleMal