【问题标题】:How do I right align text within a JLabel?如何在 JLabel 中右对齐文本?
【发布时间】:2013-02-27 22:26:40
【问题描述】:

我有以下代码:

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]

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

【问题讨论】:

标签: java swing jlabel right-align


【解决方案1】:
JLabel label = new JLabel("String", SwingConstants.RIGHT);

:)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 第二个sn-p导致“BoxLayout不能共享”异常。应该是verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      这有点烦人,但如果您希望对齐方式比网格布局更灵活,您可以将嵌套的 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);
          }
      

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:
          myLabel#setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
          

          【讨论】:

          • 这里的问题不在于对齐本身。问题是 JLabel 没有预期的大小,所以对齐效果不可见。
          • @0verbose BoxLayout 接受了 PreferredSize,如果空间是共享的,但是你告诉谁说 Container 中的所有 JComponet 都必须可见
          【解决方案7】:

          而不是使用

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

          【讨论】:

            【解决方案8】:

            你不能用下面的吗?

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

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

            【讨论】:

              【解决方案9】:

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

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

              一切正常。

              【讨论】:

              • 是的。可能您需要使用 BoxLayout.Y_AXIS 来实现该效果。
              • @Overbose 你能详细说明一下吗?我在示例代码中使用了 BoxLayout.Y_AXIS。
              猜你喜欢
              • 2012-09-17
              • 2012-08-15
              • 1970-01-01
              • 2011-02-25
              • 2011-11-25
              • 1970-01-01
              • 1970-01-01
              • 2016-07-24
              • 1970-01-01
              相关资源
              最近更新 更多