Java 复合对象如何与父对象通信?

Java 复合对象如何与父对象通信?,java,oop,message,composition,Java,Oop,Message,Composition,我来自C语言的系统编程背景,Java编程对我来说是希腊语和拉丁语 所以我的问题是:-我有2个JFrame对象 我有一个父对象a 它有子对象B 对象B上有按钮。 如果在B中单击按钮,我想更新父对象的UI 我如何才能与家长沟通-更新自己 当值正在调整且第二个GUI打开时,是否需要使更新处于“实时”状态,或者是否可以将更新延迟到关闭 它们可以推迟到关闭 使用模式对话框或作业窗格 使用模式对话框,在将代码行设置为可见后立即出现的任何代码行都将被阻止处理,直到关闭为止。在这里,您可以检查(选项

我来自C语言的系统编程背景,Java编程对我来说是希腊语和拉丁语

所以我的问题是:-我有2个
JFrame
对象

  • 我有一个父对象a
  • 它有子对象B
对象B上有按钮。 如果在B中单击按钮,我想更新父对象的UI

我如何才能与家长沟通-更新自己

当值正在调整且第二个GUI打开时,是否需要使更新处于“实时”状态,或者是否可以将更新延迟到关闭


它们可以推迟到关闭

使用模式对话框或
作业窗格

使用模式对话框,在将代码行设置为可见后立即出现的任何代码行都将被阻止处理,直到关闭为止。在这里,您可以检查(选项窗格的返回值&)对话框中放置的控件的值。注意这里的想法是不要扩展对话框。相反,只需在主代码中创建一个实例,创建控件,将它们添加到其中,并使用主框架作为父框架来显示它

“把所有的东西都放在一节课上”不是一个好的设计,也不是我一般的建议。只是主GUI没有什么理由不引用影响/更新它的控件

当值正在调整且第二个GUI打开时,是否需要使更新处于“实时”状态,或者是否可以将更新延迟到关闭


它们可以推迟到关闭

使用模式对话框或
作业窗格

使用模式对话框,在将代码行设置为可见后立即出现的任何代码行都将被阻止处理,直到关闭为止。在这里,您可以检查(选项窗格的返回值&)对话框中放置的控件的值。注意这里的想法是不要扩展对话框。相反,只需在主代码中创建一个实例,创建控件,将它们添加到其中,并使用主框架作为父框架来显示它


“把所有的东西都放在一节课上”不是一个好的设计,也不是我一般的建议。只是主GUI没有什么理由不引用影响/更新它的控件。

通常,您有一个父JFrame对象,您可以在其中放置按钮、面板等小部件。 您只需使用按钮添加一个匿名操作侦听器,然后从其内部调用父类的任何函数

public class MyFrame extends JFrame{
  private Button button 2 = new Button();

  public void init(){
       b = new Button("Click me");
       b.addActionListener(new ActionListener(){
                                       public void actionPerformed(ActionEvent e) {
                                        //CALL ANY FUNCTION OF PARENT CLASS FROM HERE.
                                        updateText();
                                       }
                                      });
  }

    updateText(){
    this.button2.setText("new text");
  }
}

你可以在这个页面上找到更多关于它的信息。通常,你有一个父JFrame对象,你可以将你的小部件如按钮、面板等放入其中。 您只需使用按钮添加一个匿名操作侦听器,然后从其内部调用父类的任何函数

public class MyFrame extends JFrame{
  private Button button 2 = new Button();

  public void init(){
       b = new Button("Click me");
       b.addActionListener(new ActionListener(){
                                       public void actionPerformed(ActionEvent e) {
                                        //CALL ANY FUNCTION OF PARENT CLASS FROM HERE.
                                        updateText();
                                       }
                                      });
  }

    updateText(){
    this.button2.setText("new text");
  }
}

您可以在本页上找到更多信息

我找到了解决此问题的另一种方法

我想它可以解决一般的授权问题

父对象由子对象组成。 父对象将此值传递给构造函数中的子对象。 这样子对象就可以调用父对象上的方法并通知任何更改


在这种情况下,子帧调用父帧并要求父帧刷新自身。

我找到了另一种解决此问题的方法

我想它可以解决一般的授权问题

父对象由子对象组成。 父对象将此值传递给构造函数中的子对象。 这样子对象就可以调用父对象上的方法并通知任何更改


在这种情况下,子帧调用父帧并要求父帧刷新自身。

“我有2个
JFrame
对象”,这就是它开始出错的地方。请注意,它们可以延迟到关闭。“我有2个
JFrame
对象”,这就是它开始出错的地方。看,他们可以推迟到关门。我明白了。这很有道理,我明白了。这在模态对话框中是有意义的。我已经实现了侦听器。然而,我的问题有点不同。我想从动作侦听器调用父对象。感谢neways,您可以从actionPerformed()方法内部调用父类(JFrame类)的任何函数。@Apurv当然可以,但您缺少更大的说明。OP正在从该按钮内启动一个新的GUI-它有自己的控件&它们没有直接引用回主GUI,也没有对这些控件的引用。仅当addEventListener()位于父类内时。这就是我不知道如何访问父类的问题。Child不知道父对象。我已经实现了侦听器。然而,我的问题有点不同。我想从动作侦听器调用父对象。感谢neways,您可以从actionPerformed()方法内部调用父类(JFrame类)的任何函数。@Apurv当然可以,但您缺少更大的说明。OP正在从该按钮内启动一个新的GUI-它有自己的控件&它们没有直接引用回主GUI,也没有对这些控件的引用。仅当addEventListener()位于父类内时。这就是我不知道如何访问父类的问题。孩子没有意识到父母。