Getting a Reference to the Parent Frame

Getting a Reference to the Parent Frame

Instances of java.awt.Dialog are often used to display error messages in an application. As a result, you may find yourself writing a component that displays a message in a Dialog when a user performs some action. However, implementing this behavior is complicated by the fact that the Dialog constructors require a reference to a java.awt.Frame instance. It’s not usually desirable to have your components “know about” or rely upon a reference to the Frame that contains them. That approach is known as tight coupling, and makes code difficult to reuse.

To obtain a reference to the Frame without tight coupling, you can traverse the component tree until you find an instance of the Frame class. Then you can create a Dialog instance to display messages. When the InfoPanel class needs access to a Dialog instance, it can call the getErrorDialog() method, which in turn calls createDialog(). The createDialog() method is called recursively until passed a reference to a Frame, which it uses to construct an instance of Dialog.

 import java.awt.*;public class InfoPanel extends Panel {	Dialog errorDialog;	public Dialog getErrorDialog() {		if (errorDialog == null) {			errorDialog = createDialog(this);		}  //  if (errorDialog == null)		return errorDialog;	}  //  public Dialog getErrorDialog()	private static Dialog createDialog(Component comp) {		if (comp instanceof Frame) {			return new Dialog((Frame)comp);		}  //  if (comp instanceof Frame)		else return createDialog(comp.getParent());	}  //  private static Dialog createDialog()}  //  public class InfoPanel extends Panel


Share the Post: