1

JLabelクラスを拡張するクラスを作成しました。このクラスを使用すると、基本的に、関連するIconImageをJLabelに添付して、サイズを正しく設定することが「より簡単」になります。

新しいJLabelをコードで作成するときは、次のように作成します。something = new MyClass("message", 1); 上記のコードでは、MyClass(String msg, int type) {}コンストラクターを配置します。このコンストラクターでは、ユーザーが指定したテキストの幅を取得できるようにしたいと思います。その幅が特定の値を超えている場合、たとえば300px、改行を挿入したいとします(基本的に、最大幅に従ってJLabelをワードラップします)。

以下のコードで、画像をJLabelに追加する部分を削除しました。これは、質問とは関係がないためです。これを処理するための別のクラスを作成しました。これはすでに機能しています。

package org.me.myimageapp;

import javax.swing.JLabel;

/**
 *
 * @author Jordan
 */
public class chatBubble extends JLabel {

public static final int BUBBLE_TO_USER = 1;
public static final int BUBBLE_FROM_USER = 2;

chatBubble(String message, int bubble_type) {
    if ( (bubble_type!=1) && (bubble_type!=2) ) {
        return;
    }

    this.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
    this.setText(message);
    this.setVisible(true);
    System.out.println("WIDTH: "+this.getSize().toString()); //WIDTH: java.awt.Dimension[width=0,height=0]

}

}

このコードを実行すると、コメントに配置したように「WIDTH:java.awt.Dimension [width = 0、height=0]」が返されます。

コンストラクターでJLabelの幅を取得する方法はありますか?また、ワードラップを可能にするJLabelに存在する方法はありますか?

4

2 に答える 2

5

Swingコンポーネントのサイズは、レンダリングされるまでゼロになり、それを回避することはできません。FontMetricsクラスを使用してテキストのサイズを見積もることができます(APIへのリンクを確認してください)。

HTMLを使用してJLabelでワードラップを取得するために利用できる応急修理もあります

編集1
あなたの質問について:

それを見積もる最良の方法は何を提案しますか?文字を数えたり、平均文字幅を掛けたりするようなものですか?

FontMetricsを使用したことがないのでわかりません。いくつか遊んで、何ができるかを確認し、このフォーラムの回答でその使用法を検索することをお勧めします。

私の2番目の解決策については、ここで質問に対する私の答えを確認してください:word-wrap-in-jlist-items

于 2011-11-30T19:29:41.693 に答える
2

htmlを使用して、ラベルのテキストの改行を取得できます。

"<html>first line <br>second line"

ただし、コンストラクターでスイングコンポーネントのサイズを取得することはできません。

于 2011-11-30T19:33:12.920 に答える