JLabel
複数行形式のテキストが必要です。そうしないと、テキストが長すぎます。Javaでこれを行うにはどうすればよいですか?
Rekha
質問する
13901 次
5 に答える
11
ラベルテキストをタグでラップしてもかまわない場合html
、JLabelは、コンテナの幅が狭すぎてすべてを保持できない場合に、自動的にワードラップします。たとえば、これをGUIに追加してから、GUIのサイズを狭すぎるように変更してみてください。
new JLabel("<html>This is a really long line that I want to wrap around.</html>");
于 2009-09-04T04:45:02.457 に答える
8
ラッピング中に JLabel スタイルをエミュレートする独自のカスタム コンポーネントを作成することをお勧めします。
import javax.swing.JTextArea;
public class TextNote extends JTextArea {
public TextNote(String text) {
super(text);
setBackground(null);
setEditable(false);
setBorder(null);
setLineWrap(true);
setWrapStyleWord(true);
setFocusable(false);
}
}
次に、電話するだけです:
new TextNote("Here is multiline content.");
親コンポーネントの高さを正しく計算するには、行数 ( textNote.setRows(2)
)を設定してください。pack()
于 2011-04-28T09:48:46.650 に答える
3
JLabel の代わりに JTextArea を使用することをお勧めします
JTextArea では、メソッド .setWrapStyleWord(true) を使用して単語の末尾の行を変更できます。
于 2009-09-04T04:26:13.750 に答える
1
高さを自動調整するマルチライン ラベル。ラベルでテキストを折り返す
private void wrapLabelText(JLabel label, String text) {
FontMetrics fm = label.getFontMetrics(label.getFont());
PlainDocument doc = new PlainDocument();
Segment segment = new Segment();
try {
doc.insertString(0, text, null);
} catch (BadLocationException e) {
}
StringBuffer sb = new StringBuffer("<html>");
int noOfLine = 0;
for (int i = 0; i < text.length();) {
try {
doc.getText(i, text.length() - i, segment);
} catch (BadLocationException e) {
throw new Error("Can't get line text");
}
int breakpoint = Utilities.getBreakLocation(segment, fm, 0, this.width - pointerSignWidth - insets.left - insets.right, null, 0);
sb.append(text.substring(i, i + breakpoint));
sb.append("<br/>");
i += breakpoint;
noOfLine++;
}
sb.append("</html>");
label.setText(sb.toString());
labelHeight = noOfLine * fm.getHeight();
setSize();
}
ありがとう、 ジグネシュ・ゴタディヤ
于 2013-05-21T04:55:35.100 に答える