2009-09-04 4 views
4

JLabelのテキストを複数行の形式にしたい場合は、テキストが長すぎます。 Javaでこれをどのようにすることができますか?複数行のJLabels - Java

答えて

3

私はあなたが単語の末尾に行を変更する方法.setWrapStyleWord(true)を使用することができる代わりに、JLabelの

のJTextAreaのを使用することをお勧めして、JTextAreaに上。

+7

JTextAreaには... –

11

htmlタグにラベルテキストをラップしても構わない場合、JLabelは、コンテナの幅が狭すぎてすべてを保持できない場合、自動的にラップします。例えば、GUIにこれを追加してみてください、その後、狭すぎるようにGUIのサイズを変更する - それがラップします:

new JLabel("<html>This is a really long line that I want to wrap around.</html>"); 
+0

を表示するためのJLabel、テキスト編集のためであり、あなたがそこにもで
を使用することができます! – 11684

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."); 

をあなたは高さを計算するpack()にしたい場合は、行(textNote.setRows(2))の量を設定していることを確認してください:

は次に、あなただけ呼び出す必要があります親コンポーネントの

+1

実際のラベルのルック・アンド・フィールを再現するためのいくつかの追加機能があります: 'setOpaque(false);''setFont(UIManager.getFont(" Label.font "));' – HughHughTeotl

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(); 
} 

おかげで、 Jignesh Gothadiya