JLabel – Mostrar texto mais longo como várias linhas?

Então diga que eu tenho uma linha muito longa que quero exibir em um JLabel . Como eu posso fazer isso?

Atualmente, linhas mais longas surgem como esta:

insira a descrição da imagem aqui

Eu tenho que resize a janela para ver o texto completo.

Como posso fazer com que haja quebra de linha quando o texto quase atinge a largura do meu JFrame ?

Não tenho certeza se algum código é necessário aqui para você responder isso, mas ainda assim:

minhas propriedades de quadro:

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

O label que eu quero modificar:

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

EDIT: mais detalhes:

Estou lendo linhas de um arquivo e exibindo-as. O tamanho das linhas não é fixo, e por isso não sei onde colocar as
.

EDIT 2:

Acabei usando o 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; } 

Apenas outro exemplo, mostrando que, com o gerenciador de layout correto, o texto envolto em tags HTML será automaticamente incluído no espaço disponível …

insira a descrição da imagem aqui

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

Use HTML para exibir o texto dentro do label.

 JLabel fancyLabel = new JLabel("Punch Taskmaster"); 

(Exemplo sugerido pelo Taskmaster adicionado em)

Formatar com HTML. Funciona bem.

 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("Question:
What is love?
Baby don't hurt me
Don't hurt me
No more"); question.setFont(new Font("Serif", Font.BOLD, 15)); question.setHorizontalAlignment(JLabel.CENTER); frame.add(question); frame.setVisible(true); } }

Algo assim. A resposta dada pelo rcook é muito correta. É apenas um exemplo para mostrar como isso pode ser feito.

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