2014-03-05 111 views
0

是否可以将事件从实例类传递给父类?将事件从孩子传递给父母

我有一个容器有两个JPanel的JFrame。上面板包含另一个较小的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)); 
       } 
      }); 
     } 
    } 
}); 

的框变量是扩展JPanel一种类型。我怎样才能让CalendarWindow检测到鼠标在上面板上点击?

+0

为什么不只是写一个方法我n'CalendarWindow'调用'public void setClickText(String text)'或类似的东西?这可以在'MouseEvent'触发时从'CalendarPanel'调用。 –

+0

是* eventPanel *扩展* JPanel *? –

+0

calendarPanel是CalendarWindow中的一个实例。我怎么能从calendarPanel调用该方法? – user2750354

回答

2

制作的方法在改变文本的父类,
和父类传递给eventPanel
(添加参数如:公共eventPanel(CalendarWindow CW)
然后通过它,新eventPanel(本)),
然后调用eventPanel内父的方法cw.themethod()

+0

这个作品,谢谢:) – user2750354

相关问题