我有一个主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
}
}
导致异常的任何想法是什么?
答案 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;
/*...*/
}
}
然后,我们需要您,您只需调用一种可用的方法来满足您的要求。
现在你可以拥有更多方法,但这取决于你的要求......