JLabel - Show longer text as multiple lines?

为君一笑 提交于 2019-11-26 02:14:45

问题


So say I have a really long line that I want to display in a JLabel. How can I do it?

Currently, longer lines come up as this:

\"enter

I have to resize the window to see the complete text.

How can I make it so that there\'s linebreaks when the text almost reaches the width of my JFrame?

I\'m not sure if any code is required here for you to answer this, but still:

my frame properties:

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

The label I want to modify:

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

EDIT: More details:

I am reading lines from a file and then displaying them. The size of lines is not fixed, and so I do not know where to put <br> at.

EDIT 2:

I ended up using 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;
}

回答1:


Just another example, showing that, with the right layout manager, text wrapped in HTML tags will automatically wrap to the available space...

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



回答2:


Use HTML to display the text within the Label.

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

(Taskmaster-suggested example added in)




回答3:


Format with HTML. Works great.

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


}



回答4:


Something like this. The answer give by rcook is very correct. Its just example to show how it can be done.

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


来源:https://stackoverflow.com/questions/14737810/jlabel-show-longer-text-as-multiple-lines

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!