Mehrzeiliger Text in JLabel

78

Wie kann ich den Text eines JLabels in eine andere Zeile erweitern?

Jessy
quelle
1
@ ChrisDennett - Es ist auch in Ordnung, nur als Dup ohne kluge Bemerkungen zu schließen :)
Ripper234
Ich denke, es war, bevor ich überhaupt das Privileg hatte zu wählen, um zu schließen.
Chris Dennett

Antworten:

86

Sie können dies tun, indem Sie HTML in den Code einfügen.

JFrame frame = new JFrame();
frame.setLayout(new GridLayout());
JLabel label = new JLabel("<html>First line<br>Second line</html>");
frame.add(label);
frame.pack();
frame.setVisible(true);
tddmonkey
quelle
Ich habe zwei Felder. Wie kann ich das zweite Feld in der nächsten Zeile anzeigen lassen? zB lbl1 - erste Zeile, lbl2 --- zweite Zeile. JLabel lbl1 = neues JLabel ("Label 1:"); panel.add (lbl1); JLabel lbl2 = neues JLabel ("Label 2"); panel.add (lbl2);
Jessy
1
Es können Formatierungsprobleme auftreten, wenn der Standardtextstil für Beschriftungen nicht mit dem von HTML übereinstimmt. Obwohl neun von zehn Mal wird es funktionieren ...
Tom Hawtin - Tackline
1
Verwenden Sie für 2 Felder untereinander einfach ein GridLayout mit 2 Zeilen und 1 Spalte. Easy peasy :)
tddmonkey
7
Ich sage die Zukunft von StackOverflow in zwei Jahren voraus: "Wie kann ich den Brief Ain meinem JLabel schreiben?" Antwort: Lassen Sie das JLabel HTML verwenden und verwenden Sie die HTML-Entität&#65;
Simon Forsberg
Denken Sie daran, die bevorzugte Größe des Etiketts festzulegen, damit die Verpackung wirksam wird.
Treecoder
17

Wenn Sie möchten, dass die Größe Ihres jLabel-Texts automatisch geändert wird, z. B. in einem dehnbaren Gridbaglayout, reicht dies aus, um den Text wie folgt in HTML-Tags einzufügen:

JLabel label = new JLabel("<html>First line and maybe second line</html>");
tObi
quelle
14

Ich habe JTextArea für mehrzeilige JLabels verwendet.

JTextArea textarea = new JTextArea ("1\n2\n3\n"+"4\n");

http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html

Seseel Lybon
quelle
1
Ich kann nicht glauben, dass dies mehr erwähnt wird! Überall sonst wird gesagt, dass der HTML-Modus verwendet werden soll, der viele Dinge wie zusätzliche Abstände aufhebt.
Rokoko
8

Geben Sie den Inhalt (dh das Eigenschaftsfeld "Text") in ein <html></html>Tag ein. Sie können also eine neue Zeile verwenden <br>oder <P>einfügen.

Zum Beispiel:

String labelContent = "<html>Twinkle, twinkle, little star,<BR>How I wonder what you are.<BR>Up above the world so high,<BR>Like a diamond in the sky.</html>";

Es wird wie folgt angezeigt:

Twinkle, Twinkle, kleiner Stern,
wie ich mich frage, was du bist.
Oben über der Welt so hoch,
wie ein Diamant am Himmel.

Web Think
quelle
4

Das ist schrecklich. Alle diese Antworten deuten darauf hin, dass der Anfang des Etikettentextes hinzugefügt wird, und es gibt kein Wort in der Java 11-Dokumentation (oder früher) für JLabel, das darauf hindeutet, dass der Text eines Etiketts anders behandelt wird, wenn er anfängt <html>. Wer sagt, dass das überall funktioniert und immer funktioniert? Und Sie können große, große Überraschungen erleben, wenn Sie beliebigen Text einpacken und an eine HTML-Layout-Engine übergeben.

Ich habe die Antwort, die JTextArea vorschlägt, positiv bewertet. Ich werde jedoch darauf hinweisen, dass JTextArea kein Ersatz ist. Standardmäßig wird es erweitert, um Zeilen zu füllen. So verhält sich JLabel nicht. Ich habe noch keine Lösung dafür gefunden.

Scott M.
quelle
3

In meinem Fall war es genug, den Text bei jeder zu teilen \nund dann JLabelfür jede Zeile eine zu erstellen :

JPanel panel = new JPanel(new GridLayout(0,1));
String[] lines = message.split("\n");
for (String line : lines) {
    JLabel label = new JLabel(line);
    panel.add(label);
}

Ich habe oben in einem verwendet JOptionPane.showMessageDialog

Dediqated
quelle
1

Sie können JTextAreaBearbeitungsfunktionen verwenden und entfernen, um normalen schreibgeschützten mehrzeiligen Text zu erhalten.

JTextArea textArea = new JTextArea("line\nline\nline");
textArea.setEditable(false);

JTextArea

setEditable

willmcpherson2
quelle
0
String labelText ="<html>Name :"+name+"<br>Surname :"+surname+"<br>Gender :"+gender+"</html>";
JLabel label=new JLabel(labelText);
label.setVisible(true);
label.setBounds(10, 10,300, 100);
dialog.add(label);
Harun ERGUL
quelle
Während dieser Code die Frage beantworten kann, würde die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie er die Frage beantwortet, ihren langfristigen Wert erheblich verbessern. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen.
Toby Speight
-8

warum Sie komplexe Dinge geben ... Sie können es einfach tun, indem Sie "\ n" anstelle von HTML-Tags setzen

Nissen
quelle
Es funktioniert eindeutig nicht mit JLabels, sondern nur mit anderen TextComponents oder JXlabels
kuranes