How to make JLabels start on the next line

筅森魡賤 提交于 2019-12-03 11:53:18
John Kugelman supports Monica

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:

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);
...

I read this piece of code:

 pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.VERTICAL));

It seems BoxLayout doesn't have VERTICAL. Upon searching, this will work using the following code:

 pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.Y_AXIS));

Here is what you need to use:

JLabel economy = new JLabel("<html>Economy<br>Regularity</html>");
waqasahmed

A quick way is to use html within the JLabel. For instance include the <br/> tag.

Otherwise, implement a BoxLayout.

Make a separate JPanel for each line, and set the dimensions to fit each word:

JLabel wordlabel = new JLabel("Word");

JPanel word1 = new JPanel();
word1.setPreferredSize(new Dimension(#,#);

This should work for each word. You can then add each of those JPanels to your main JPanel. This also allows you to add other components next to each word.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!