2012-06-14 1 views
5

複数行のJLabelの最速のソリューションは次の1つです(テキストはvarから来ているので、手動でHTMLコードを入れたくありませんすべてのx文字、それほど醜い):HTMLなしで複数行のJLabel(まったく同じものを探しているJTextArea)を取得する方法

public class JMultilineLabel extends JTextArea{ 
    private static final long serialVersionUID = 1L; 
    public JMultilineLabel(String text){ 
     super(text); 
     setEditable(false); 
     setCursor(null); 
     setOpaque(false); 
     setFocusable(false); 
     setFont(UIManager.getFont("Label.font"));  
     setWrapStyleWord(true); 
     setLineWrap(true); 
    } 
} 

...これを処理するのに良い方法はありませんか?

+0

なぜだろう'JTextArea'を編集不可能に設定すると、poi全体の' JTextField'ではなく 'JLabel'に相当するものが得られますntは編集可能です:)あるいは、おそらく実際には複数行の 'JLabel'の後ろにありますか? – Boro

+0

うわー、私は変わったJLabelの息苦しさを言いたかったのですが、私は何を考えていましたか? – Whimusical

+0

しかし、私はもう一度見なければならないことを知っているでしょう。それは、提案された結果が(明らかに)私の疑問に合わないので重複しているかもしれません。 – Whimusical

答えて

3

複数ラベルを使用する場合は、その使用をサポートするため、テキストにHTMLを使用するだけです。そのため、ラインブレーキタグ</br>を使用してラインを分割するか、<p></p>段落タグに別のラインを挿入してください。

JLabelには、<html>タグを使用してHTMLを使用することを忘れないでください。

More available here.

ところで私がチェックするのを忘れJLabel使用に関する他の関連質問があったし、少なくともいくつかがあった場合、thisまたはthisを確認してください。 :)


EDIT:ワーキングサンプルについて

、スタイルや利用可能なスペースを取って、段落やラベルを使用してを設定せずに、別のアプローチを示す、下記を参照してください。

import java.awt.BorderLayout; 
import java.awt.Color; 
import javax.swing.*; 

public class LabelHTMLAutoResize { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       JPanel p = new JPanel(new BorderLayout()); 
       JLabel l = new JLabel("<html><p> Some verrrry long text Some verrrry long Some verrrry long text dsa ads oiosi o</p>"); 
       l.setVerticalAlignment(SwingConstants.TOP); 
       l.setOpaque(true); 
       l.setBackground(Color.green); 
       p.add(l); 
       f.setContentPane(p); 
       /* good practice is to use f.pack(); and let the size be automatically calculated but we want to show line wrapping thus frame size is set */ 
       f.setSize(200, 200); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 
3

私は自動的に折り返しを作成し、入力文字列を解析する必要はなく、<BR>をx文字ごとに

01にする必要があります

(HTMLの)本文の幅を設定します。 Swing HTMLサポートには基本スタイルが含まれています。

私はthere it is


はいああ.. SOどこかに転がっJLabelの幅を制限するためにCSSを使用した例をいくつか持っていた:

import javax.swing.*; 

class FixedWidthLabel { 

    public static void main(String[] srgs) { 
     String s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eu nulla urna. Donec sit amet risus nisl, a porta enim. Quisque luctus, ligula eu scelerisque gravida, tellus quam vestibulum urna, ut aliquet sapien purus sed erat. Pellentesque consequat vehicula magna, eu aliquam magna interdum porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sollicitudin sapien non leo tempus lobortis. Morbi semper auctor ipsum, a semper quam elementum a. Aliquam eget sem metus."; 
     String html1 = "<html><body style='width: "; 
     String html2 = "px'>"; 

     JOptionPane.showMessageDialog(null, new JLabel(html1+"200"+html2+s)); 
     JOptionPane.showMessageDialog(null, new JLabel(html1+"300"+html2+s)); 
    } 
} 

+0

(悪い) '
'を避けたい場合は編集を参照してください。 –

+0

+1いいえ私はテキストサイズを制限する方法が不思議でした。しばらくしてから私は別のアプローチを選択しました(私の** EDIT **で発表されました)。 – Boro

+0

@Boro *「しばらくしてから別のアプローチを選択しました」*ツールチップでそのアプローチをテストしましたか? –

関連する問題