【问题标题】:Title collapse in TitledBorderTitledBorder 中的标题折叠
【发布时间】:2011-08-10 07:38:44
【问题描述】:

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

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

我正在为正文使用 MigLayout。

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

【问题讨论】:

    标签: swing layout miglayout titled-border


    【解决方案1】:

    Borders 不直接参与LayoutManager 的尺寸评估(他们本身不是JComponent,而只是JComponent 周围的装饰)。

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

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

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

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

    实际上,更好的方法是完全避免TitledBorder,正如来自JGoodies 成名的Karsten Lentszch 所建议的那样,将其替换为彩色JLabel 和水平JSeparator,这将完全参与布局,因此可用于尺寸计算。

    【讨论】:

    • 我同意你的观点,但谁知道可能有更好的方法
    • 是的,您是对的,请参阅我的编辑,在面板中对组件进行分组的推荐方法是使用 JLabel 和 JSeparator,而不是 TitledBorder。
    • 同意,但我被限制使用边框。无论如何,感谢您提供如此有用的信息和想法:)
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      这对我很有效:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多