Laying Out Components within a Container |
Although it's possible to do without a layout manager, you should use a layout manager if at all possible. Layout managers make it easy to resize a container and adjust to platform-dependent component appearance and to different font sizes. They also can be reused easily by other containers and other programs. If your custom container won't be reused, can't be resized, and completely controls normally system-dependent factors such as font size and component appearance (implementing its own controls if necessary), then absolute positioning might make sense. [CHECK]Here's an applet that brings up a window that uses absolute positioning.
Below are the instance variable declarations, constructor implementation, and
paint()
method implementation of the window class. (Here's a link to the whole program. The program runs either within an applet, with the help of AppletButton, or as an application.)//Where instance variables are declared: private boolean laidOut = false; private Button b1, b2, b3; public NoneWindow() { super(); setLayout(null); setFont(new Font("Helvetica", Font.PLAIN, 14)); b1 = new Button("one"); add(b1); b2 = new Button("two"); add(b2); b3 = new Button("three"); add(b3); } public void paint(Graphics g) { if (!laidOut) { Insets insets = insets(); //We're guaranteed that insets() will return a valid Insets //if called from paint() -- it isn't valid when called from //the constructor. insets = insets(); // We could perhaps cache this in an ivar, but // insets can change, and when they // do, the AWT creates a whole new Insets // object; the old one is invalid. // BUT WILL IT REALLY CHANGE??? b1.reshape(50 + insets.left, 5 + insets.top, 50, 20); b2.reshape(70 + insets.left, 35 + insets.top, 50, 20); b3.reshape(130 + insets.left, 15 + insets.top, 50, 30); laidOut = true; } }
Laying Out Components within a Container |