在Java中为另一个类中的对象运行方法

在Java中为另一个类中的对象运行方法,java,swing,Java,Swing,我在扩展JFrame的类中有一个ActionListener。单击按钮时,我需要设置在主类中创建的JFrame扩展对象的可见性。在本例中,单击该按钮将使具有该按钮的现有对象变为不可见,并使另一个JFrame对象变为可见 ActionListener在一个JFrame类中,对象在主类中创建。如何从JFrame类中的ActionListener运行主类中该特定对象的方法 我已经有了一个setVisibility方法,但不清楚如何指导ActionListener在另一个类中存在的对象上运行该方法 在主

我在扩展JFrame的类中有一个ActionListener。单击按钮时,我需要设置在主类中创建的JFrame扩展对象的可见性。在本例中,单击该按钮将使具有该按钮的现有对象变为不可见,并使另一个JFrame对象变为可见

ActionListener在一个JFrame类中,对象在主类中创建。如何从JFrame类中的ActionListener运行主类中该特定对象的方法

我已经有了一个setVisibility方法,但不清楚如何指导ActionListener在另一个类中存在的对象上运行该方法

在主要课堂上:

Object1 jFrameObj1 = new Object1();

Object2 jFrameObj2 = new Object2();

在Object1类(内部操作侦听器)中:


首先,您应该尊重Java命名约定,为类和变量选择更好的名称。当您想对一个对象调用一个方法时,您需要一个对此对象的引用。因此,主方法只需将对第二帧的引用传递给第一帧:

Object2 frame2 = new Object2();
Object1 frame1 = new Object1(frame2);
然后在Object1类中:

private Object2 frameToDisplayWhenButtonIsClicked;

public Object2(frameToDisplayWhenButtonIsClicked) {
    this.frameToDisplayWhenButtonIsClicked;
}

...

public void actionPerformed(ActionEvent e) {
    setVisible(false);
    frameToDisplayWhenButtonIsClicked.setVisible(true);
}

请发布一个SSCCE.Ugh,另一个向用户吐出一堆JFrames的GUI,这是一个糟糕的用户界面设计。更好的解决办法是:不要这样做。使用CardLayout交换视图。也请退房,谢谢。我会调查卡片布局。我很感激你的建议。你上面的setVisible是在类上以静态方式调用的,而不是在对象上调用的,为什么?由于变量名应该以小写字母开头,因此Java命名约定的使用也被禁用。这可能看起来很琐碎,但在做了一段时间后,您就会明白为什么不是。该方法是严格OOP中的一条消息。请确保将其发送到您运行的对象。正如您可能知道的,我是Java初学者。您能否对您的代码示例提供一些详细说明?我一直在尝试实现它,但不确定我是否正确理解它。这就是您所指的吗?主:SplashScreen splash=新SplashScreen();JFrame:私人飞溅屏幕;公共SplashScreen(splash){this.splash;}您在问题中发布了一些代码,我对这些代码进行了重构,使其符合您的要求。如果您不了解对象、构造函数和字段是什么,那么不应该尝试使用Swing。首先学习基础知识。在代码的帮助下,我最终还是解决了这个问题。
private Object2 frameToDisplayWhenButtonIsClicked;

public Object2(frameToDisplayWhenButtonIsClicked) {
    this.frameToDisplayWhenButtonIsClicked;
}

...

public void actionPerformed(ActionEvent e) {
    setVisible(false);
    frameToDisplayWhenButtonIsClicked.setVisible(true);
}