java - 将事件从 child 传递给 parent

标签 java swing jpanel mouseevent

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

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

下面是主窗口代码:

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));
                }
            });
        }
    }
});

boxs 变量是扩展 JPanel 的类型。如何才能让 CalendarWindow 检测到上面板中的鼠标单击?

最佳答案

在父类中创建一个更改文本的方法,
并将父类传递给eventPanel
(添加一个参数,例如public eventPanel(CalendarWindow cw)
然后传递它,new eventPanel(this)),
然后在 eventPanel 中调用父级的方法 (cw.themethod())

关于java - 将事件从 child 传递给 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22211904/

相关文章:

java - lambda 表达式和实例化方法引用之间的不同行为

Java Swing 动画

java - 如何实时调整Java动画?

Java 绘制不在 Swing 中绘制

Java Gui 不会显示面板和组件

java - Gui Swing 绘图对象未显示

java - 使用 AssertJ 验证列表项是否具有相同的值,但不是相同的实例

java - 将 XML 实体映射到 Java 对象

java - 如何在freemarker中通过键值访问json值?

java - 如何设置已具有背景图像的 JButton 的大小?