Java setVisible从一个JFrame类到另一个?

时间:2013-09-16 07:01:08

标签: java swing jframe

我有一个主JFrame,用于创建基本通知JFrame类的实例。

我从主JFrame创建通知的代码如下所示:

new Notification(from, msg, time);

我想知道我在通知类中如何访问我的主JFrame。基本上我想从我的通知类中更改主JFrame上的某些组件的setVisible。

修改

我的client.java(主JFrame)调用通知

public JPanel pnlMidMenuButtons;
/**** code... **/
Notification ntf = new Notification(from, msg, time); // Further down the notification is being called

ImportUI:

公共类ImportUI extends Client实现NotificationParent {

public void setImportantFieldsVisible(boolean visible) {
    pnlMidMenuButtons.setVisible(visible);
}

}

NotificationParent:

public interface NotificationParent {
    public void setImportantFieldsVisible(boolean visible);
    public void setAgentName(String agentName);
}

我的通知类:

public class Notification extends JFrame {

    private NotificationParent parent;
    /*...*/

    public Notification(NotificationParent parent, String from, String msg, Date time) {
        this.parent = parent;
        parent.setImportantFieldsVisible(false); // Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    }

}

导致异常的任何想法是什么?

1 个答案:

答案 0 :(得分:1)

实际答案将取决于您的需求,但我会创建一个interface(如果您想为某些对象而不是其他对象提供某些功能,甚至可以创建一系列接口。)

public interface NotificationParent {
    public void setImportantFieldsVisible(boolean visible);
}

然后我会在调用者上实现这个接口...

public class ImportUI extends ... implements NotificationParent {
    /*...*/
    public void setImportantFieldsVisible(boolean visible) {
        //....
    }
}

我会从其他参数到Notification,因此它可以接受NotificationParent的引用...

public class Notification extends ... {

    private NotificationParent parent;
    /*...*/

    public Notification(NotificationParent parent, String from, String msg, Date time) {
        this.parent = parent;
        /*...*/
    }

}

然后,我们需要您,您只需调用一种可用的方法来满足您的要求。

现在你可以拥有更多方法,但这取决于你的要求......