JPanel- Listener durch JTextArea aktivieren

pl4gu33

Top Contributor
hey,,...

ich bin mir nicht sicher, nach was ich da wirklich suchen soll, finde irgendwie nix dazu ich habe folgendes Problem:
(Beispiel Projekt da das richtige zu groß wäre)

ich habe ein Panel mit MouseListener. Auf dem JPanel habe ich ein JLabel und eine JTextArea platziert. Nun will ich aber, dass der MouseListener vom Panel auch angesprochen wird, wenn auf eine der beiden Komponenten geklickt wird ... beim Label funktioniert das ... bei der TextArea nicht ... kann mir einer erklären, warum das so ist bzw. ob man die TextArea auch irgendwie "durchklickbar" machen kann ?

ps. ja es sollte eine TextArea bleiben und es sollte jetzt auch kein GlassPane für den Frame benutzt werden, da ich im richtigen Projekt noch andere Sachen damit mache 🙂

Java:
public class Durchklicken extends JFrame{
	
	private JPanel pnl;
	public Durchklicken(){
		this.setSize(400, 400);
		init();
	}

	private void init() {
		// TODO Auto-generated method stub
		pnl=new JPanel();
		pnl.addMouseListener(new MouseListener(){

			@Override
			public void mouseClicked(MouseEvent arg0) {
				// TODO Auto-generated method stub
				System.out.println("Click");
			}

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

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

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

			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
		});
		JLabel lbl=new JLabel("TEST1");
		JTextArea txt=new JTextArea("TEST2");
		txt.setEditable(false);
		txt.setFocusable(false);
		pnl.add(lbl);
		pnl.add(txt);
		this.add(pnl);
		this.setVisible(true);
	}
	
	public static void main(String[] args){
		new Durchklicken();
	}
}
 
Zuletzt bearbeitet:
Wenn ein Event nicht von einer Komponente genutzt wird, dann reicht es dieses an die Einschließende weiter. Du könntest doch den MouseListener einfach an die TextArea anhängen, oder fängt dieser mehr ab, als nur clicks?
 
Wenn ein Event nicht von einer Komponente genutzt wird, dann reicht es dieses an die Einschließende weiter. Du könntest doch den MouseListener einfach an die TextArea anhängen, oder fängt dieser mehr ab, als nur clicks?

dort hängt im richtigen Projekt auch noch ein MouseMotionListener dran, der dafür sorgt, dass man das ganze Panel verschieben kann etc. Also is noch mehr dahinter, das war jetzt wie gesagt nur ein Beispiel um mein Problem simpel zu verdeutlichen 🙂

Natürlich könnte ich ne Kette bilden, die dann die verschiedenen MouseListener/ MouseMotionListener auslöst aber mir wärs lieber, wenn man durchklicken realisieren könnte
 
Ich verstehe das nicht 🙂 Du willst deine MouseListener-Aktion vom JPanel auch dann ausführen, wenn du auf das JLabel und das JTextField klickst?
 
Ich verstehe das nicht 🙂 Du willst deine MouseListener-Aktion vom JPanel auch dann ausführen, wenn du auf das JLabel und das JTextField klickst?

genau,... beim JLabel klappts ja auch ... bei der TextArea nicht und da wollt ich einfach wissen, ob man diese sozusagen "durchklickbar" machen kann. Bzw. eine Erklärung haben, warum es genau funktioniert bzw. warum es nicht funktioniert 🙂

Ansonsten würde ich das halt anders lösen 🙂
 
Zuletzt bearbeitet:
Ich bräuchte mal eine Erklärung, was "durchklickbar" heisst ;🙂rtfm:

einfach nur, dass bei einem Klick auf die TextArea der MouseListener des Panels angesprochen wird, wie es ja beim Label ist (zumindest sieht es so aus 🙂). 🙂

Also ich will einfach nur wissen, warum bei einem Klick auf das Label trotzdem der Panel MouseListener angesprochen wird und warum das bei der TextArea nicht so ist. Bzw. ob man es realisieren kann, dass bei einem Klick auf die Area der Panellistener ebenfalls ausgelöst wird ....
 
Zuletzt bearbeitet:
Also wenn du bei deinem Panel nur einen MouseListener hast, dann kannst du den extern über folgende Anweisung aufrufen:
Java:
//e ist das MouseEvent
 panel.getMouseListeners()[0].mouseClicked(e);

Füge dies einfach in die Event-Methode für dein Textfield ein, und geb das Event weiter.
 
Also wenn du bei deinem Panel nur einen MouseListener hast, dann kannst du den extern über folgende Anweisung aufrufen:
Java:
//e ist das MouseEvent
 panel.getMouseListeners()[0].mouseClicked(e);

Füge dies einfach in die Event-Methode für dein Textfield ein, und geb das Event weiter.

mm okay eigentl. wollt ich das ohne eine "Event Kette" hinbekommen, aber das geht dann wohl nicht 🙂
aber naja ich werds dann halt so machen müssen. danke schon mal 🙂

kann mir denn trotzdem wer erklären, warum man beim JLabel den Panel dadrunter ansprechen kann, wenn der Label keinen eigenen Listener hat udn bei der TextArea nicht ?


LÖSUNG: okay ich habs selber rausgefunden.... die TextArea hat von Haus aus MouseListener... ist ja auch klar, da man auf die TextArea im Normalfall klicklen kann ... das Label hat sowas nicht... wenn man diese entfernt, sollte es klappen mit dem Durchklicken 😀
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben