18

Java では、スペース不足のために JLabel のテキストを表示できなかった場合、テキストは切り捨てられ、最後に「...」が追加されます。

現在 JLabel が全文を表示しているか、切り捨てられているかを簡単に確認するにはどうすればよいですか?


編集:

を使用してテキストのサイズを調べる方法があることがわかりましたFontMetrics。ただし、このソリューションは質問に完全には答えません。JLabel のテキストに HTML 装飾が含まれている場合、metrics.stringWidth()HTML タグの幅も計算されます。そのため、結果がmetrics.stringWidth()JLabel の幅より大きくなる可能性がありますが、それでもテキストは正しく表示されます。

テキストの表示中にJLabel自体がどのような決定を下したかを知る方法はありますか? テキストを切り捨てることにしたかどうか。

4

6 に答える 6

8

省略記号は、ラベルの UI デリゲート (通常は のサブクラス) によってBasicLabelUI、レイアウトと優先サイズの計算の一部として追加されます。この例に示すように、メソッドlayoutCL()をオーバーライドしてジオメトリを調べることができます。

実際問題として、省略を無視してツール ヒントに全文を表示します。

于 2011-11-01T22:38:03.023 に答える
7

オラクルから -テキストの測定:

// get metrics from the graphics
FontMetrics metrics = graphics.getFontMetrics(font);
// get the height of a line of text in this font and render context
int hgt = metrics.getHeight();
// get the advance of my text in this font and render context
int adv = metrics.stringWidth(text);
// calculate the size of a box to hold the text with some padding.
Dimension size = new Dimension(adv+2, hgt+2);

sizeのサイズと比較してくださいJLabel.getSize()

于 2011-11-01T18:43:12.847 に答える
5

I suppose if the component's preferred size is greater than it's actual size, then you can expect truncation. In order for this to work, of course, the component must already be realized.

于 2011-11-01T18:46:14.353 に答える
3

これを確認して、layoutCompoundLabel()方法を参照してください。ラベルのテキストを表す文字列を返します。オリジナルと比較して、クリッピングされるかどうかを判断できます。

ジム S.

于 2011-11-01T20:55:12.483 に答える
1

これを行う通常の方法は、ラベルに表示されるテキストの予想サイズを計算するメソッドを使用することです。等幅フォントを使用している場合、これは簡単です。

lengthOfChar * numChars

等幅フォントを使用していない場合は、明らかにはるかに困難です。これを計算しようとするユーティリティがいくつかあると思います。

表示された文字列のサイズを取得したら、JLabel の長さと比較して、ラベルが小さすぎるかどうかを確認できます。

于 2011-11-01T18:44:50.640 に答える
0

HTML テキストのサイズを取得するには、このhttps://www.java.net/node/665691を確認してください。

View view = (View) javax.swing.plaf.basic.BasicHTML.createHTMLView(label, value.toString());
int width = (int) view.getPreferredSpan(View.X_AXIS);
int height = (int) view.getPreferredSpan(View.Y_AXIS);

唯一の小さな問題は、html 以外のテキストに問題がある可能性があることです。したがって、html 以外の文字列にはフォント メトリックを使用してください。以下は私にとって完璧に機能しました:

if (value.toString().startsWith("<html>")) {
   View view = (View) javax.swing.plaf.basic.BasicHTML.createHTMLView(label, value.toString());
   width = (int) view.getPreferredSpan(View.X_AXIS);
} 
else {
   width =  (int) label.getFontMetrics(label.getFont()).stringWidth(value.toString());
}
于 2014-02-16T16:16:32.983 に答える