Mehrzeiliger Text in JLabel


78

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


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

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


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.



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.


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


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



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

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


Es funktioniert eindeutig nicht mit JLabels, sondern nur mit anderen TextComponents oder JXlabels
kuranes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.