5

複数行のJLabelの最速の解決策は、次のようなものだとは信じられません(テキストは変数から取得されるため、x文字ごとにHTMLコードを手動で配置したくありません。非常に醜いです)。

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

...これを処理するためのより良い方法ではないことを確認してください????

4

2 に答える 2

3

マルチラベルが必要な場合はHTML、その使用をサポートしているため、テキストで使用するだけです。したがって、ラインブレーキタグを使用してラインを分割するか、段落タグ</br>に別々のラインを配置します。<p></p>

タグJLabelでテキストを開始することにより、HTMLを使用することをマークすることを忘れないでください。<html>

詳細はこちらをご覧ください。

ところで、使用に関する他の関連する質問があるかどうかを確認するのを忘れました。JLabel少なくともいくつかありました。これまたはこれを確認してください。:)


編集:

スタイルを設定せず、段落とラベルを使用して使用可能なスペースを使用して、別のアプローチを示す作業サンプルについては、以下を参照してください。

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);
            }
        });
    }
}
于 2012-06-14T13:28:16.647 に答える
3

行ラッピングを自動的に行う必要があり、着信文字列を解析して<BR>すべてのx文字を入力する必要はありません

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

CSSを使用しJLabelてSOの周りの横になっている幅を制限する例がいくつかありました。


ああ、そうです、そこにあります

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

于 2012-06-14T13:48:50.917 に答える