3

この問題に関する多くの投稿がありましたが、そこにいる人々の回答を理解できませんでした。この投稿のように:「JLabel のフォントのサイズを最大サイズに変更する方法」のように、答えはフォントサイズを 14 に変換します! しかし、それは静的であり、他の回答ではさらに進んでいます。出力画面全体が増加しているようです。

「lnum」という名前のJLabelに特定の数字を表示します。3桁までの数字を表示できますが、その後は「4 ...」のように表示されます。数字がラベルに収まる場合は変更しないでください。フォントサイズですが、数字が4桁の場合は、収まるようにフォントサイズを小さくする必要があります. 注: jLabel のサイズを変更したくありません。Itのテキストを変更したいだけです。

編集:これが私が試したコードです

String text = lnum.getText();        
System.out.println("String Text = "+text);//DEBUG
Font originalFont = (Font)lnum.getClientProperty("originalfont"); // Get the original Font from client properties            
 if (originalFont == null) { // First time we call it: add it
        originalFont = lnum.getFont();
        lnum.putClientProperty("originalfont", originalFont);
    }
 int stringWidth = lnum.getFontMetrics(originalFont).stringWidth(text);       

 int componentWidth = lnum.getWidth();
 stringWidth = stringWidth + 25; //DEBUG TRY
 if (stringWidth > componentWidth) { // Resize only if needed
        // Find out how much the font can shrink in width.
        double widthRatio = (double)componentWidth / (double)stringWidth;

        int newFontSize = (int)Math.floor(originalFont.getSize() * widthRatio); // Keep the minimum size

        // Set the label's font size to the newly determined size.
        lnum.setFont(new Font(originalFont.getName(), originalFont.getStyle(), newFontSize));
    }else{
        lnum.setFont(originalFont); // Text fits, do not change font size
        System.out.println("I didnt change it hahaha");//DEBUG 
 }
    lnum.setText(text);

テキストが「-28885」の場合、「-28 ...」と表示されるなど、何度も機能しないという問題があります。

文字列幅 = 文字列幅 + 25; //デバッグ試行

取得する長さを増やすために、このコードを追加する必要がありました。問題を一時的に修正するために追加したコードです。これに対する恒久的な解決策が必要です。

4

1 に答える 1

2

あなたが参照した質問に対する回答から適応:

void setTextFit(JLabel label, String text) {
    Font originalFont = (Font)label.getClientProperty("originalfont"); // Get the original Font from client properties
    if (originalFont == null) { // First time we call it: add it
        originalFont = label.getFont();
        label.putClientProperty("originalfont", originalFont);
    }

    int stringWidth = label.getFontMetrics(originalFont).stringWidth(text);
    int componentWidth = label.getWidth();

    if (stringWidth > componentWidth) { // Resize only if needed
        // Find out how much the font can shrink in width.
        double widthRatio = (double)componentWidth / (double)stringWidth;

        int newFontSize = (int)Math.floor(originalFont.getSize() * widthRatio); // Keep the minimum size

        // Set the label's font size to the newly determined size.
        label.setFont(new Font(originalFont.getName(), originalFont.getStyle(), newFontSize));
    } else
        label.setFont(originalFont); // Text fits, do not change font size

    label.setText(text);
}

適合する数値を表示する場合は、フォントを元の状態にリセットする必要があります (そのelse部分を参照)。

編集:元のフォントへの参照を保持できない/保持したくない場合は、それを「クライアントプロパティ」として保存できます(最初の行を参照)。

于 2013-10-05T06:56:56.950 に答える