Java - 从组合对象调用this.function()

时间:2012-04-15 20:12:24

标签: java composition

我有函数dodaj();在JFrame中,在这个JFrame中我有JPanel。 要使用JPanel中的按钮我正在使用ActionListener。但是当有人点击按钮我想调用函数dodaj();来自JFrame。 如果我在JFrame中有ActionLIstener我可以使用this.dodaj();,但我在JPanel上有动作监听器,其组成为JFrame。 我怎么能打电话给dodaj();来自ActionListener的(JFrame函数)是在JPanel?

感谢您阅读并抱歉我的英语不好。

2 个答案:

答案 0 :(得分:2)

你没有提到它,但是你的JFrame和JPanel都是这两个类,所以你的问题是你想从另一个类的一个类调用一个方法?如果是这样,关键是获取对JFrame类的引用,并通过构造函数或方法参数将其传递给JPanel类。

例如:

class MyFrame extends JFrame {
   private MyPanel myPanel;

   public MyFrame() {
      myPanel = new MyPanel(this);
   }

   public void frameMethod() {
      System.out.println("in JFrame's frameMethod");
   }

}

class MyPanel extends JPanel {
   private MyFrame myFrame;
   private JButton someButton = new JButton("Button");

   public MyPanel(final MyFrame myFrame) {
      this.myFrame = myFrame;

      someButton.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent arg0) {
            myFrame.frameMethod();
         }
      });
   }  
}

顺便说一句,我不建议在没有充分理由的情况下扩展JFrame或JPanel,例如需要覆盖方法。

答案 1 :(得分:1)

在您的JPanel中,您始终可以使用getParent()返回您的父JFrame容器。

如果JPanel上的ActionListener是一个匿名类,您可以直接使用getParent()方法直接引用它。如果ActionListener是一个单独的类,则可以在实例化时将父引用传递给它。