5

我有以下代码:

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]

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

4

9 回答 9

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

:)

于 2013-02-27T14:06:26.523 回答
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);
于 2011-06-06T19:54:09.167 回答
5

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

于 2011-06-06T19:48:35.183 回答
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);
    }

无论大小,我都使用水平胶将其保持在右侧,但您可以放置​​刚性区域以使其具有特定距离。

于 2011-06-06T20:16:00.730 回答
2

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

于 2011-06-06T19:56:08.003 回答
2
myLabel#setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
于 2011-06-06T20:09:38.043 回答
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);
}
于 2012-07-14T20:20:55.590 回答
1

您不能使用以下内容吗?

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

JFrame至少在 Container 中有效。不确定一个JPanel

于 2012-09-29T22:49:43.667 回答
0

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

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

一切正常。

于 2011-06-06T19:59:56.030 回答