JLabel – Längeren Text als mehrere Zeilen anzeigen?

Lesezeit: 3 Minuten

Benutzer-Avatar
Benutzer2027425

Angenommen, ich habe eine wirklich lange Zeile, die ich in a anzeigen möchte JLabel. Wie kann ich es tun?

Derzeit erscheinen längere Zeilen wie folgt:

Geben Sie hier die Bildbeschreibung ein

Ich muss die Größe des Fensters ändern, um den vollständigen Text zu sehen.

Wie kann ich es so machen, dass es Zeilenumbrüche gibt, wenn der Text fast die Breite meiner erreicht JFrame?

Ich bin mir nicht sicher, ob hier ein Code erforderlich ist, damit Sie dies beantworten können, aber dennoch:

Meine Rahmeneigenschaften:

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

Das Label, das ich ändern möchte:

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

EDIT: Mehr Details:

Ich lese Zeilen aus einer Datei und zeige sie dann an. Die Größe der Zeilen ist nicht festgelegt, daher weiß ich nicht, wo ich sie platzieren soll <br> beim.

BEARBEITEN 2:

Am Ende habe ich verwendet 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;
}

  • Möglicherweise finden Sie das zweite Beispiel dieser Antwort hilfreich. Es verwendet HTML, um einem Tooltip ein erweitertes Layout bereitzustellen, aber das Konzept ist dasselbe

    – Verrückter Programmierer

    6. Februar 2013 um 20:13 Uhr

Nur ein weiteres Beispiel, das zeigt, dass mit dem richtigen Layout-Manager Text umbrochen wird HTML Tags werden automatisch auf den verfügbaren Platz umgebrochen…

Geben Sie hier die Bildbeschreibung ein

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

  • Das ist viel zu viel Arbeit für das, was ich brauche. Am Ende habe ich verwendet JTextArea. Siehe meine Bearbeitung in OP.

    – Benutzer2027425

    6. Februar 2013 um 23:03 Uhr

  • Hinzufügen von „“ am Anfang und „“ am Ende von String ist zu viel arbeit?? Wow, du wirst enttäuscht sein 😛

    – Verrückter Programmierer

    6. Februar 2013 um 23:05 Uhr

  • Das Problem, das ich bei dieser Art von Lösung sehe, besteht darin, dass dynamisch abgerufener Text, der bereits HTML-Tags enthält, beispielsweise für Markups, überhaupt nicht angezeigt wird (es wird kein Text angezeigt), wie es die Tags und sind beides zweimal hinzugefügt. Es ist wirklich schade, dass ein JLabel von Haus aus keine Multiline unterstützt.

    – Timmos

    5. September 2014 um 7:56 Uhr

  • @Timmos In diesem Fall müssten Sie es nicht selbst einrichten. Wenn Sie denken, dass Sie “vielleicht” einen HTML-Ladden bekommen String du könntest auch nachschauen (String#startsWith)…

    – Verrückter Programmierer

    5. September 2014 um 7:57 Uhr

  • @MadProgrammer Sie müssten diese Überprüfung überall dort durchführen, wo Sie ein (mehrzeiliges) Etikett benötigen … Für solche grundlegenden Funktionen bevorzuge ich wiederverwendbaren Code, also eine sofort einsatzbereite Komponente, die dies für mich erledigt. Aber du hast natürlich recht, ich halte das einfach nicht für eine sehr elegante Lösung.

    – Timmos

    5. September 2014 um 11:28 Uhr


  • Das Erste, was mir in den Sinn kommt, wenn jemand das Wort „Frage“ sagt, lol

    Benutzer1181445

    6. Februar 2013 um 20:18 Uhr

Benutzer-Avatar
Schmied

Etwas wie das. Die Antwort von rcook ist sehr richtig. Es ist nur ein Beispiel, um zu zeigen, wie es gemacht werden kann.

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

1006610cookie-checkJLabel – Längeren Text als mehrere Zeilen anzeigen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy