我的TitledBorder标题比身体大。 它被减少,长度根据身体的最大长度设定。
假设我的身体中有一个标签TEST
,其标题为TESTING TITLE
的TitledBorder。
在这种情况下,标题会被缩小并显示为TESTI
我正在使用MigLayout。
任何方式都可以显示完整的标题而不管其中包含的内容是什么?
答案 0 :(得分:2)
Border
不会直接参与LayoutManager
的尺寸评估(它们本身不是JComponent
,而只是JComponent
周围的装饰。
因此,确保TitledBorder
中的标题完全可见的唯一方法是为其指定的面板设置最小尺寸(或者更确切地说是嵌入在该面板中的组件)。
在这种情况下,最小尺寸计算应基于TitledBorder
的当前标题和Font
用于绘制其标题的TitledBorder
。
老实说,我不确定,所有这些工作都值得写作。
根据TitledBorder
中的确切组件,一个更简单的解决方案是使用JTextField.setColumns(n)
,其中n与标题相比足够大。
实际上,更好的方法是完全避免TitledBorder
,正如Karsten Lentszch从JGoodies成名所建议的那样,并用彩色JLabel
和水平{{1}替换它},它将完全参与布局,因此可用于大小计算。
答案 1 :(得分:2)
我发现添加适当宽度的水平支柱会强制面板调整大小以显示整个标题:
myPanel.add(Box.createHorizontalStrut(desiredWidth));
我确信可能有一种方法可以在运行时动态找到所需的宽度,但我只是以懒惰的方式进行:将其设置为覆盖我的TitledBorder标题文本大小的宽度。
答案 2 :(得分: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);