How to make JLabels start on the next line

Jessy picture Jessy · Oct 8, 2009 · Viewed 59.3k times · Source
JPanel pMeasure = new JPanel();
....
JLabel economy = new JLabel("Economy");
JLabel regularity = new JLabel("Regularity");
pMeasure.add(economy);
pMeasure.add(regularity);
...

When I run the code above I get this output:

Economy Regularity

How can I get this output, where each JLabel starts on a new line? Thanks

Economy  
Regularity

Answer

John Kugelman picture John Kugelman · Oct 8, 2009

You'll want to play around with layout managers to control the positioning and sizing of the controls in your JPanel. Layout managers are responsible for placing controls, determining where they go, how big they are, how much space is between them, what happens when you resize the window, etc.

There are oodles of different layout managers each of which allows you to layout controls in different ways. The default layout manager is FlowLayout, which as you've seen simply places components next to each other left to right. That's the simplest. Some other common layout managers are:

  • GridLayout - arranges components in a rectangular grid with equal-size rows and columns
  • BorderLayout - has one main component in the center and up to four surrounding components above, below, to the left, and to the right.
  • GridBagLayout - the Big Bertha of all the built-in layout managers, it is the most flexible but also the most complicated to use.

You could, for example, use a BoxLayout to layout the labels.

BoxLayout either stacks its components on top of each other or places them in a row — your choice. You might think of it as a version of FlowLayout, but with greater functionality. Here is a picture of an application that demonstrates using BoxLayout to display a centered column of components:

BoxLayout screenshot

An example of code using BoxLayout would be:

JPanel pMeasure = new JPanel();
....
JLabel economy = new JLabel("Economy");
JLabel regularity = new JLabel("Regularity");
pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.Y_AXIS));
pMeasure.add(economy);
pMeasure.add(regularity);
...