The Java TM Tutorial

| Start of Tutorial > Start of Trail > Start of Lesson | Search

Trail: Creating a GUI with JFC/Swing
Lesson: Laying Out Components Within a Container

## Solving Common Layout Problems

> Problem: How do I specify a component's exact size?
> - First, make sure that you really need to set the component's exact size. Each Swing component has a different preferred size, depending on the font it uses and the look and feel. For this reason, it often doesn't make sense to specify a Swing component's exact size.

> - If the component isn't controlled by a layout manager, you can set its size by invoking the `setSize` or `setBounds` method on it. Otherwise, you need to provide size hints and then make sure you're using a layout manager that respects the size hints.

> - If you extend a Swing component class, you can give size hints by overriding the component's `getMinimumSize`, `getPreferredSize`, and `getMaximumSize` methods. What's nice about this approach is that each `getXxxxSize` method can get the component's default size hints by invoking `super.getXxxxSize()`. Then it can adjust the size, if necessary, before returning it.

> - Another way to give size hints is to invoke the component's `setMinimumSize`, `setPreferredSize`, and `setMaximumSize` methods.

> > Note: No matter how you specify your component's size, be sure that your component's container uses a layout manager that respects the requested size of the component. The `FlowLayout` and `GridBagLayout` managers use the component's preferred size (the latter depending on the constraints that you set), but `BorderLayout` and `GridLayout` usually don't. The `BoxLayout` manager generally uses a component's preferred size (although components can be larger), and is the only layout manager that respects the component's maximum size.

> > If you specify new size hints for a component that's already visible, you then need to invoke the `revalidate` method on it, to make sure that its containment hierarchy is laid out again. Then invoke the `repaint` method.

> Problem: My custom component is being sized too small.

> - Does the component implement the `getPreferredSize` and `getMinimumSize` methods? If so, do they return the right values?
> - Are you using a layout manager that can use as much space as is available? See General Rules for Using Layout Managers for some tips on choosing a layout manager and specifying that it use the maximum available space for a particular component.

> If you don't see your problem in this list, see Solving Common Component Problems.

| Start of Tutorial > Start of Trail > Start of Lesson | Search