web-dev-qa-db-ja.com

JLabel-長いテキストを複数行で表示しますか?

つまり、JLabelに表示したい非常に長い行があるとします。どうすればいいですか?

現在、より長い行が次のように表示されます。

enter image description here

完全なテキストを表示するには、ウィンドウのサイズを変更する必要があります。

テキストがJFrameの幅にほぼ達したときに改行があるようにするには、どうすればよいですか?

これに答えるためにここでコードが必要かどうかはわかりませんが、それでも:

私のフレームプロパティ:

frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(450, 400));
frame.setLocation(new Point(400, 300));
frame.setLayout(new BorderLayout());

変更したいラベル:

question = new JLabel("Question:");
question.setFont(new Font("Serif", Font.BOLD, 15));
question.setHorizontalAlignment(JLabel.CENTER);

編集:詳細:

ファイルから行を読み取って表示しています。行のサイズが固定されていないため、<br>をどこに配置するかわかりません。

編集2:

結局JTextAreaを使用しました。

private JTextArea textAreaProperties(JTextArea textArea) {
    textArea.setEditable(false);  
    textArea.setCursor(null);  
    textArea.setOpaque(false);  
    textArea.setFocusable(false);
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
    return textArea;
}
10
user2027425

ちょうど別の例で、適切なレイアウトマネージャーを使用すると、HTMLタグでラップされたテキストが自動的に使用可能なスペースにラップされることを示しています...

enter image description here

public class TestHTMLLabel {

    public static void main(String[] args) {
        new TestHTMLLabel();
    }

    public TestHTMLLabel() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                StringBuilder sb = new StringBuilder(64);
                sb.append("<html>I have something to say, it's beter to burn out then to fade away.").
                                append("  This is a very long String to see if you can wrap with in").
                                append("the available space</html>");

                JLabel label = new JLabel(sb.toString());

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(label);
                frame.setSize(100, 100);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }    
        });
    }        
}
24
MadProgrammer

HTMLを使用して、ラベル内のテキストを表示します。

JLabel fancyLabel = new JLabel("<html>Punch Taskmaster</html>");

(タスクマスター-提案された例が追加されました)

10
arcy

HTMLでフォーマットします。よく働く。

import javax.swing.*;
import Java.awt.*;

public class Test {

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(450, 400));
        frame.setLocation(new Point(400, 300));
        frame.setLayout(new BorderLayout());

        final JLabel question = new JLabel("<html>Question:<br>What is love?<br>Baby don't hurt me<br>Don't hurt me<br>No more</html>");
        question.setFont(new Font("Serif", Font.BOLD, 15));
        question.setHorizontalAlignment(JLabel.CENTER);

        frame.add(question);

        frame.setVisible(true);
    }


}
5
user1181445

このようなもの。 rcookによる答えは非常に正しいです。それがどのように行われるかを示すための単なる例です。

 b1 = new JLabel("<html>Default Lable I have to resize the
                 <br/> window to see the complete text.</html>");
4
Smit