0

我有一个标题大于正文的 TitledBorder。它被剪掉,长度根据身体的最大长度设置。

假设我在正文中有一个标签,TEST它由 TitledBorder 包围,并带有 title TESTING TITLE。在这种情况下,标题被删减并显示为TESTI

我正在使用 MigLayout 作为正文。

不管它包含什么内容,有什么方法可以显示完整的标题?

4

3 回答 3

2

Borders 不直接参与 the 的 size 评估LayoutManager(它们不是 aJComponent本身,只是 a 周围的装饰品JComponent)。

因此,确保 a 中的标题TitledBorder完全可见的唯一方法是为其分配的面板(或者更确切地说是嵌入在该面板中的组件)设置最小尺寸。

在这种情况下,最小尺寸计算应基于您的当前标题TitledBorderFont用于TitledBorder绘制其标题的标题。

老实说,我不确定,所有这些工作都值得写。

根据包含在您的 中的确切组件TitledBorder,一个更简单的解决方案是使用JTextField.setColumns(n)与标题相比 n 足够大的地方。

实际上,更好的方法是完全避免,正如JGoodiesTitledBorder名声中的 Karsten Lentzch 所建议的那样,将其替换为color 和 Horizo ​​ntal ,这将完全参与布局并因此用于尺寸计算。JLabelJSeparator

于 2011-04-21T14:08:33.917 回答
2

我发现添加适当宽度的水平支柱将强制面板调整大小,以便显示整个标题:

    myPanel.add(Box.createHorizontalStrut(desiredWidth));

我确信可能有一种方法可以在运行时动态找到所需的宽度,但我只是用懒惰的方式来做:将其设置为覆盖我的 TitledBorder 标题文本大小的宽度。

于 2012-11-06T01:00:32.063 回答
1

这对我很有效:

 final String myPanelTitle = UIManager.getString("myPanel_title");
 final Border myPanelBorder = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GREEN), myPanelTitle);
 JPanel myPanel = new JPanel(){
      @Override
      public Dimension getPreferredSize(){
           Dimension d = super.getPreferredSize();
           int insets = 2 * (myPanelBorder.getBorderInsets(this).left + myPanelBorder.getBorderInsets(this).right);
           double minWidth = this.getFontMetrics(this.getFont()).stringWidth(myPanelTitle) + insets;
           if(d.getWidth() > minWidth)
                 minWidth = d.getWidth();
           return new Dimension((int)minWidth, d.height);
       }
 };
 myPanel.setBorder(myPanelBorder);
于 2016-10-02T02:47:18.957 回答