82

JLabelコンテナにあります。フォントのデフォルトサイズは非常に小さいです。JLabelのテキストを最大サイズにしてほしい。

どうやってやるの?

4

7 に答える 7

115
label = new JLabel("A label");
label.setFont(new Font("Serif", Font.PLAIN, 14));

SwingコンポーネントでHTMLを使用する方法から引用

于 2010-04-26T16:33:26.610 に答える
86

最もきれいなコードではありませんが、次の例では、内部のテキストがラベルからはみ出さずに可能な限り内側に収まるように、適切なフォント サイズをJLabel呼び出し先として選択します。label

Font labelFont = label.getFont();
String labelText = label.getText();

int stringWidth = label.getFontMetrics(labelFont).stringWidth(labelText);
int componentWidth = label.getWidth();

// Find out how much the font can grow in width.
double widthRatio = (double)componentWidth / (double)stringWidth;

int newFontSize = (int)(labelFont.getSize() * widthRatio);
int componentHeight = label.getHeight();

// Pick a new font size so it will not be larger than the height of label.
int fontSizeToUse = Math.min(newFontSize, componentHeight);

// Set the label's font size to the newly determined size.
label.setFont(new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse));

基本的に、コードはオブジェクトJLabelを使用して内のテキストが占有するスペースFontMetricsを調べ、その情報を使用して、 からテキストをオーバーフローさせずに使用できる最大のフォント サイズを決定しますJLabel

上記のコードは、おそらくを保持する のpaintメソッド、またはフォント サイズを変更する必要があるときに呼び出される何らかのメソッドに挿入できます。JFrameJLabel

以下は、上記のコードが動作しているスクリーンショットです。

代替テキスト
(出典: coobird.net )

于 2010-04-26T16:57:44.330 に答える
10
 JLabel textLabel = new JLabel("<html><span style='font-size:20px'>"+Text+"</span></html>");
于 2014-08-31T19:03:56.123 に答える
4

ラベルのソースコード - 色とフォントを変更する方法 (Netbeans)

jLabel1.setFont(new Font("Serif", Font.BOLD, 12));


jLabel1.setForeground(Color.GREEN);
于 2015-03-19T15:22:51.910 に答える
2

受け入れられた回答にはいくつかの制限があることを指摘したかっただけです(使用しようとしたときに発見しました)

  1. 書かれているように、実際には以前のフォントサイズの比率に基づいてフォントサイズを再計算し続けます...したがって、わずか数回の呼び出しの後、フォントサイズが大きすぎます。(たとえば、DESIGNED フォントとして 12 ポイントから開始し、ラベルを 1 ピクセルだけ拡張すると、公開されたコードはフォント サイズを 12 * (たとえば) 1.2 (フィールド スペースとテキストの比率) = 14.4 または 14 ポイント フォントとして計算します。もう 1 ピクセルとコールすると、16 ポイントに到達します!)。

ComponentResizedListenerしたがって、繰り返し呼び出しの設定 ( 、または custom/modified など) での使用には (適応なしでは) 適していませんLayoutManager

リストされたコードは、事実上 10 pt の開始サイズを想定していますが、現在のフォント サイズを参照しているため、(ラベルの作成時にフォントのサイズを設定するために) 1 回呼び出すのに適しています。マルチコール環境でint newFontSize = (int) (widthRatio * 10);は、int newFontSize = (int)(labelFont.getSize() * widthRatio);

  1. を使用new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse))して新しいフォントを生成するため、更新されたフォントでは元のフォントからの太字、斜体、または色などはサポートされていません。代わりに使用すると、より柔軟になりますlabelFont.deriveFont

  2. このソリューションでは、HTML ラベル テキストはサポートされていません。(提供された回答コードの意図した結果ではないことはわかっていますが、HTMLテキストを持っていたのでJLabelJPanel正式に制限を発見しました。テキストの長さは、htmlタグの幅を含めFontMetrics.stringWidth()て計算されます-つまり、単により多くのテキスト)

このSOの質問への回答を見ることをお勧めします.trashgodの回答は、ほぼ同じ質問に対するさまざまな回答(これを含む)を指しています。そのページで、他の回答の1つを30〜100倍高速化する追加の回答を提供します。

于 2015-06-09T06:57:21.150 に答える