从JInternalFrame调用JFrame的方法而不执行新的实例

时间:2013-12-17 21:47:59

标签: java swing jframe jinternalframe

我这样做有一个大问题:

从JFrame,我调用JInternalFrame,所以,我想从JIF调用JF的方法。问题是,如果我创建了这个JF的新实例,则不会应用更改,因为它与原始实例不同。

我正在登录此JIF,如果凭据正确,JF中的菜单必须更改,否则,不得更改。

我在互联网上的其他网站上读到“调用”是解决方案,但“调用”显然只适用于新实例。还有其他解决方案吗?

2 个答案:

答案 0 :(得分:4)

不要考虑JFrame或JInternalFrame,因为如果/当您扩展程序时,您可能不会使用任何扩展这两个类中的任何一个的类。相反,您应该在一般情况下看一个对象如何调用另一个对象的方法。解决方案是让一个对象获取有效引用到感兴趣的对象,可能是通过构造函数参数或setter方法传递该引用。然后在该引用上调用您想要的公共方法。在这个JFrames和Swing中没有任何其他Java程序。

关于,

  

我在互联网上的其他网站上读到了#34; Invoke"是解决方案......

不,这与您当前的问题无关,而是与Swing线程问题无关,这也不是您当前代码失败的原因。

要获得更多帮助和更好的帮助,请考虑创建并发布sscce

答案 1 :(得分:0)

感谢大家的帮助!

我已经解决了这个问题!

一般来说,为了调用我所有的JInternalFrame,我使用了一般的全局声明:

private JInternalFrame jif;

但是为了解决我的问题,我直接使用了我的JInternalFrame的类声明了一个新的构造函数:

private LogInJInternalFrame logIn;

在调用之前,我在Log In JIF中声明了一个公共全局构造函数:

public MainJFrame mainJF;

这样,在我的JF中使用新的构造函数,我就能够访问JIF中的所有公共声明。然后,我使用类似的东西打电话:

private void logInCall(){
    logIn = new LogInJInternalFrame(); //--New instance of my JIF
    logIn.mainJF = this;  /*Set the class to the constructor instead to declare a new one*/
    logIn.setVisible(true);
}

之后,在我的JIF中,当凭据是正确的时候,我已经使用了这个:

mainJF.setNewUserMenu();  /*The class's instance let me "invoke" the method I've wanted*/

就是这样,结果之后,我只能说“我真的需要放松一下,更好地思考”。

再次感谢!!!