本文よりも大きなタイトルを持つ TitledBorder があります。カットダウンされ、本体の最大長に合わせて長さが設定されます。
本文にというラベルがあり、TESTtitle を持つ TitledBorder で囲まれているとしTESTING TITLEます。この場合、タイトルは切り取られて次のように表示されます。TESTI
ボディには MigLayout を使用しています。
含まれるコンテンツに関係なく、完全なタイトルを表示する方法はありますか?
本文よりも大きなタイトルを持つ TitledBorder があります。カットダウンされ、本体の最大長に合わせて長さが設定されます。
本文にというラベルがあり、TESTtitle を持つ TitledBorder で囲まれているとしTESTING TITLEます。この場合、タイトルは切り取られて次のように表示されます。TESTI
ボディには MigLayout を使用しています。
含まれるコンテンツに関係なく、完全なタイトルを表示する方法はありますか?
適切な幅の Horizontal Strut を追加すると、タイトル全体が表示されるようにパネルのサイズが強制的に変更されることがわかりました。
myPanel.add(Box.createHorizontalStrut(desiredWidth));
おそらく、実行時に必要な幅を動的に見つける方法があると思いますが、私は怠惰な方法でそれを行います: 私の TitledBorder タイトル テキストのサイズをカバーする幅に設定します。
Borderは、 によるサイズ評価に直接参加しませんLayoutManager(それらは、JComponent自体ではなく、 の周りの単なる装飾JComponentです)。
したがって、 のタイトルTitledBorderが完全に表示されるようにする唯一の方法は、割り当てられたパネル (またはそのパネルに埋め込まれたコンポーネント) の最小サイズを確保することです。
この場合、最小サイズの計算は、あなたの現在のタイトルとTitledBorder、そのタイトルを描画するためにFont使用されるに基づいている必要があります。TitledBorder
正直なところ、よくわかりませんが、この作品はすべて書く価値があります。
内に含まれる正確なコンポーネントに基づいてTitledBorder、より簡単な解決策はJTextField.setColumns(n)、 n がタイトルと比較して十分に大きい場所を使用することです。
実際には、 JGoodiesTitledBorderの名声の Karsten Lentszch によって提案されているように、完全に回避し、レイアウトに完全に関与するため、サイズの計算に使用される色付きおよび水平方向に置き換えることをお勧めします。JLabelJSeparator
これは私にとってはうまくいきます:
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);