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

| 我有以下代码:
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]
由于某些原因,标签未设置为我指定的首选大小,因此我认为由于此原因,标签文本无法正确对齐。但我不确定。任何帮助,将不胜感激。     
已邀请:
        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);
    
        
JLabel label = new JLabel(\"String\", SwingConstants.RIGHT);
:)     
        我认为这取决于您使用的布局,在XY中(我记得是JBuilder中的某种布局),它应该可以工作,但在其他情况下可能会出现问题。尝试将最小尺寸更改为首选尺寸。     
        这有点烦人,但是如果您希望比网格布局更灵活的对齐方式,则可以将嵌套JPanels与框布局一起使用。
    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);
    }
无论大小如何,我都使用水平胶将其保持在正确的位置,但是您可以将其放置在刚性区域中以使其具有特定的距离。     
        您需要确保
LayoutManager
调整标签的大小以填充目标区域。您可能有一个
JLabel
组件,其大小恰好适合于文本的长度,并且在布局中保持对齐。     
        
myLabel#setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
    
        而不是使用
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);
}
    
        您不能使用以下内容吗?
Jlabel label = new JLabel(\"String\");
label.setBounds(x, y, width, height); // <-- Note the different method used.
label.setHorizontalAlignment(JLabel.RIGHT);
至少在
JFrame
容器中有效。不确定
JPanel
。     
        根据你们的答复,我确定BoxLayout不支持我想要的文本对齐方式,因此我将其更改为
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,1,0,0);
而且一切正常。     

要回复问题请先登录注册