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

标签 java composition

我有函数 dodaj();在 JFrame 中,在这个 JFrame 中我有 JPanel。 要使用 JPanel 中的按钮,我正在使用 ActionListener。但是当有人点击按钮时我想调用函数 dodaj();来自 JFrame。 如果我在 JFrame 中有 ActionLIstener,我可以使用 this.dodaj();,但我在 JPanel 上有 Action 监听器,它是 JFrame 的组合。 我怎样才能调用 dodaj(); (JFrame 函数)来自 ActionListener 并位于 JPanel 上?

感谢您阅读它,并对我的英语不好表示歉意。

最佳答案

你没有提到这一点,但是你的 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。

关于Java - 从组合对象调用 this.function(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165651/

相关文章:

C++:为什么这个 sync() 在这个组合模式中不起作用?

inheritance - UML-组合和继承同时进行

c++ - 如何将方法结果作为参数传递给 C++ 中的基类构造函数?

java - 如何在java中解压zip文件中的zip文件

java - 没有 XML 的 Spring Bean 注释

java - 将 double 转换为 BigInteger

java - java vs python 中获取十六进制字符串表示的二进制数据

ios - 为 UIViewController 中的 UIView 创建 Controller

go - 了解golang中的继承与组合

java - 如何使用 iBatis 将数组写入 Oracle 10g XE 数据库?