【问题标题】:How can I force the text go to the button of the panel?如何强制文本转到面板的按钮?
【发布时间】:2011-02-02 12:56:09
【问题描述】:

目前我有以下代码可以正常工作。

label = new JLabel(panelLabel,SwingConstants.CENTER);
outputPanel.add(label,BorderLayout.CENTER);

我将文本放在面板的中心(根据左右位置以及上下位置)。

现在我想将位置设置为底部(并在“左右”方面居中)。我尝试在第一行使用 SOUTH 而不是 CENTER。编译器没有抱怨,但在执行期间我得到IllegalArgumentException: HorizontalAlignment。那是什么?

【问题讨论】:

    标签: java user-interface swing text alignment


    【解决方案1】:

    您使用的 JLabel 构造函数是JLabel(String label, int horizontalAlignement)

    正如javadoc 中定义的那样,这个int 应该只在某些值中:

    JLabel public JLabel(String text, int Horizo​​ntalAlignment)
    创建一个 JLabel 实例 指定文本和水平 结盟。标签居中 垂直显示在其显示区域中。

    参数:
    text - 标签显示的文本。
    horizo​​ntalAlignment - SwingConstants 中定义的以下常量之一:LEFT、CENTER、RIGHT、LEADING 或 TRAILING。

    此值设置文本在 JLabel 内对齐的位置。你不能在这里使用“SOUTH”,这就是你得到“InvalidArgument”异常的原因。


    如果你想让你的文字在标签的底部,你必须使用setVerticalAlignment(int),和Swingconstants.BOTTOM。这假设您的标签居中,并且可能会在您的面板上占据很宽的高度。

    如果您为此面板使用 BorderLayout,您可能想尝试使用BorderLayout.SOUTH 添加标签,作为布局管理器的提示。这会将标签粘贴到底部,并且它将具有最小高度(显示文本所必需的高度)。在这种情况下,文本的垂直对齐并不重要。

    【讨论】:

      【解决方案2】:

      outputPanel 使用了什么布局管理器? 你试过了吗

      outputPanel.add(label,BorderLayout.PAGE_END);
      

      ?

      如果您将 outputPanel 的布局管理器设置为 BorderLayout,您将不会收到此错误。 据我所知,没有任何问题。

      【讨论】:

      • 对于 outputPanel,我使用 BorderLayout。带有文本的“单元格”被添加到正确的位置,我只是想让文本位于单元格的正确位置。但我刚刚意识到我不知道我的“牢房”在哪里结束和开始。所以,我的文字在底部。
      • 您是否仍然收到 IllegalArgumentException: Horizo​​ntalAlignment 异常?如果未将标签的边框设置为 label.setBorder(LineBorder.createGrayLineBorder());它会告诉你你的“细胞”在哪里结束和开始。
      • 再次阅读他的问题,他在 第一 行使用 SwingConstants.SOUTH,而不是在第二行。
      • @Gnoupi 不错。我太快下结论了。
      猜你喜欢
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多