如何使JLabel从下一行开始

时间:2009-10-08 00:01:47

标签: java swing jpanel jlabel layout-manager

JPanel pMeasure = new JPanel();
....
JLabel economy = new JLabel("Economy");
JLabel regularity = new JLabel("Regularity");
pMeasure.add(economy);
pMeasure.add(regularity);
...

当我运行上面的代码时,我得到了这个输出:

Economy Regularity

如何获得此输出,每个JLabel在新行上启动?谢谢

Economy  
Regularity

5 个答案:

答案 0 :(得分:19)

您需要使用layout managers来控制JPanel中控件的位置和大小。布局管理器负责放置控件,确定它们的位置,它们的大小,它们之间的空间大小,调整窗口大小时会发生什么等等。

有大量不同的布局管理器,每个布局管理器都允许您以不同的方式布局控件。默认布局管理器是FlowLayout,正如您所见,它只是将组件从左到右放置在彼此旁边。那是最简单的。其他一些常见的布局管理器是:

  • GridLayout - 在具有相等大小的行和列的矩形网格中排列组件
  • BorderLayout - 中间有一个主要组件,上方,下方,左侧和右侧最多有四个周围组件。
  • GridBagLayout - 所有内置布局管理器的Big Bertha,它是最灵活但也最复杂的使用。

例如,您可以使用BoxLayout来布置标签。

  

BoxLayout要么将其组件堆叠在一起,要么将它们放在一行 - 您的选择。您可能会将其视为FlowLayout的版本,但具有更强大的功能。下面是一个应用程序的图片,演示了使用BoxLayout显示组件的居中列:

     

BoxLayout screenshot

使用BoxLayout的代码示例如下:

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

答案 1 :(得分:5)

我读了这段代码:

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

似乎BoxLayout没有VERTICAL。在搜索时,这将使用以下代码:

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

答案 2 :(得分:2)

以下是您需要使用的内容:

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

答案 3 :(得分:0)

快速的方法是在JLabel中使用html。 例如,包含<br/>标记。

否则,实施BoxLayout。

答案 4 :(得分:0)

为每一行创建一个单独的JPanel,并设置尺寸以适合每个单词:

JLabel wordlabel = new JLabel("Word");

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

这适用于每个单词。然后,您可以将每个JPanel添加到主JPanel。这也允许您在每个单词旁边添加其他组件。