如何正确对齐JLabel中的文本?

时间:2011-06-06 19:42:20

标签: java swing jlabel right-align

我有以下代码:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

for(int xx =0; xx < 3; xx++)
{
    JLabel label = new JLabel("String");
    label.setPreferredSize(new Dimension(300,15));
    label.setHorizontalAlignment(JLabel.RIGHT);

    panel.add(label);
}

这就是我希望文本的外观:

[                         String]
[                         String]
[                         String]

它的外观如何

[String]
[String]
[String]

由于某种原因,标签没有设置为我指定的首选大小,我认为因此,它没有正确对齐我的标签文本。但我不确定。任何帮助将不胜感激。

9 个答案:

答案 0 :(得分:13)

JLabel label = new JLabel("String", SwingConstants.RIGHT);

:)

答案 1 :(得分:5)

我认为这取决于您正在使用的布局,在XY中(我记得在JBuilder中是某种布局)它应该可以工作,但在其他情况下可能会有问题。尝试将最小尺寸更改为首选尺寸。

答案 2 :(得分:5)

setPreferredSize / MinimumSize / MaximumSize方法取决于父组件的布局管理器(在本例中为面板)。

首先尝试使用setMaximumSize而不是setPreferredSize,如果我没有出错应该使用BoxLayout。

此外:可能你必须使用和玩胶水:

panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(label);
panel.add(Box.createHorizontalGlue());

如果您需要Y_AXIS BoxLayout,您还可以使用嵌套面板:

verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));    
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(label);
panel.add(Box.createHorizontalGlue());
verticalPanel.add(panel);

答案 3 :(得分:3)

这有点令人讨厌,但如果您希望在对齐方面比在网格布局方面更灵活,则可以使用带有框布局的嵌套JPanel。

    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));


    for (int xx = 0; xx < 3; xx++) {
        JPanel temp = new JPanel();
        temp.setLayout(new BoxLayout(temp,BoxLayout.LINE_AXIS));

        JLabel label = new JLabel("String");
        temp.add(Box.createHorizontalGlue());

        temp.add(label);
        panel.add(temp);
    }

我使用水平胶将其保持在右侧,无论大小,但你可以放入刚性区域使其达到特定的距离。

答案 4 :(得分:2)

您需要确保LayoutManager调整标签大小以填充目标区域。您可能有一个JLabel组件,其大小与文本的长度完全相同,并且在布局中保持对齐。

答案 5 :(得分:2)

myLabel#setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);

答案 6 :(得分:1)

而不是使用

label.setHorizontalAlignment(JLabel.RIGHT);

使用

label.setHorizontalAlignment(SwingConstants.RIGHT);

因此你有:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(int xx =0; xx < 3; xx++)
{
    JLabel label = new JLabel("String");
    label.setPreferredSize(new Dimension(300,15));
    label.setHorizontalAlignment(SwingConstants.RIGHT);
    panel.add(label);
}

答案 7 :(得分:1)

你能不能使用以下内容?

Jlabel label = new JLabel("String");
label.setBounds(x, y, width, height); // <-- Note the different method used.
label.setHorizontalAlignment(JLabel.RIGHT);

这至少在JFrame容器内有效。不确定JPanel

答案 8 :(得分:0)

根据你们的回复,我能够确定BoxLayout不支持我想要的文本对齐方式,所以我将其更改为

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,1,0,0);

一切正常。