Java 将事件从子级传递到父级

Java 将事件从子级传递到父级,java,swing,jpanel,mouseevent,Java,Swing,Jpanel,Mouseevent,是否可以将事件从实例类传递到父类 我有一个JFrame和一个包含两个JPanel的容器。上面的面板包含另一个较小的JPanel,我已经成功设置了一个MouseListener,以便在单击小面板时执行命令。我想在单击小面板时在底部面板上显示文本。问题在于,事件处理是在上面的panel类中完成的,该类无权访问JFrame上另一个panel的实例 以下是主窗口代码: public CalendarWindow() { // Set global variables size = new

是否可以将事件从实例类传递到父类

我有一个JFrame和一个包含两个JPanel的容器。上面的面板包含另一个较小的JPanel,我已经成功设置了一个MouseListener,以便在单击小面板时执行命令。我想在单击小面板时在底部面板上显示文本。问题在于,事件处理是在上面的panel类中完成的,该类无权访问JFrame上另一个panel的实例

以下是主窗口代码:

public CalendarWindow() {
    // Set global variables
    size = new Dimension(600,600);
    setMinimumSize(size);

    // Set default window layout and behaviour
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
    setLayout(new BorderLayout());
    Container c = getContentPane();

    // Create panels and components
    eventPanel = new EventPanel(new Dimension(size.width - 30, size.height/3));     
    CalendarPanel calendarPanel = new CalendarPanel(new Dimension(size.width - 30, size.height*2/3));


    // Add components and panels to content pane
    c.add(eventPanel, BorderLayout.SOUTH);
    c.add(calendarPanel, BorderLayout.NORTH);
}
这是calendarPanel中的事件处理:

boxes[i][j].addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
        if(selectedBox != null)
            selectedBox.unselect();
        selectedBox = (DateBox)e.getSource();
        selectedBox.getParent().getParent().dispatchEvent(e);


        if(SwingUtilities.isRightMouseButton(e)) {
            rightClickMenu menu = new rightClickMenu();
            menu.show(e.getComponent(), e.getX(), e.getY());
            menu.newEvent.addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    selectedBox.addCalendarEvent(new CalendarEvent("Kaupa mjólk", 14, 15));
                }
            });
        }
    }
});

boxes变量是一种扩展JPanel的类型。如何使CalendarWindow检测到上面板中的鼠标单击?

在父类中创建一个方法来更改文本,
并将父类传递给eventPanel
(添加参数,例如公共事件面板(日历窗口cw),
然后将其传递给new eventPanel(此)),

然后在eventPanel中调用父对象的方法(cw.themethod())

为什么不在
日历窗口中编写一个名为
public void set clicktext(String text)
或类似的方法呢?然后,每当触发
MouseEvent
时,就可以从
CalendarPanel
调用此函数。eventPanel是否扩展了JPanel?CalendarPanel是CalendarWindow中的一个实例。如何从calendarPanel调用该方法?是的,eventPanel也扩展了JPanel