Events weiterleiten

milchbubbi

Mitglied
Hallo zusammen!

Sitze gerade an einem kleinen Programm, und kriege ein Problem nicht geloest. Das Programm sieht wie folgt aus: ein JFrame mit zwei JPanel's. Das JFrame faengt das MouseEvent ab ung behandelt den Rechtsklick:
Code:
// code in JFrame

addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent evt) {
                if (evt.getButton() == evt.BUTTON3){
                       this.foobar();
                }
            }
        });

Jetzt will ich in einem der JPanel's den Linksklick behandeln.
Code:
// code im JPanel
]addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent evt) {
                 System.out.println("Testausgabe");
            }
        });

Leider leitet das JFrame das MouseEvent nicht an die Kindelemente weiter.

Wie koennte ich trotzdem im JPanel auf das Event reagieren?
thx im Voraus.

cu

[EDIT 19:08]
sorry, den "Swing / Awt / Swt" Unterforum nicht gesehen
[EDIT]
 
Zuletzt bearbeitet:
Hallo!

Schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 * @author Tom
 *
 */
public class EventPropagationExample extends JFrame {

    JPanel childPanel;
    
    public EventPropagationExample(){
        super("EventPropagationExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
                
        getContentPane().addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e) {
                if(SwingUtilities.isRightMouseButton(e)){
                    System.out.println("Right: " + e);
                }
            }
        });
        
        childPanel = new JPanel();
        childPanel.setPreferredSize(new Dimension(400,300));
        childPanel.setBackground(Color.ORANGE);
        childPanel.addMouseListener(new MouseAdapter(){
            @Override
            public void mousePressed(MouseEvent e) {
                if(SwingUtilities.isLeftMouseButton(e)){
                    System.out.println("Left: " + e);
                }else{
                    childPanel.getParent().dispatchEvent(e);
                }
            }
        });
    
        add(childPanel);
        getContentPane().setBackground(Color.BLUE);
        
        setSize(640, 480);
        setVisible(true);
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        new EventPropagationExample();
    }
}

Gruß Tom
 
howdy Thomas,

danke fuer die Antwort!
Die dispatchEvent() Methode war genau das, was mir gefehlt hat. Ich habe ursprunglich angenommen, dass die Events sich automatisch durch die Elementenhirarchie nach oben (bzw. nach unten ) bewegen, und dass man sie nicht explizit weiterreichen muss. Um so groesser war dann die Ueberraschung, als das Programm nicht lief ;)

cu und guten Rutsch ins neue Jahr!
 
Zurück