2010-03-10 16 views

Antwort

34

Nr

Sie HTML in dem Etikett verwenden können, aber dann müssen Sie hart, um die Pause-Tag kodieren.

Ein besserer Ansatz besteht darin, einen JTextArea zu verwenden und das Wrapping einzuschalten. Sie können den Hintergrund, den Vordergrund, die Schriftart usw. des Textes so ändern, dass er wie ein Etikett aussieht.

Hinweis, diese Antwort als mindestens Java 7.

Wie pro @ Darrens Antwort veraltet ist, müssen Sie einfach die Zeichenfolge mit <html> und </html> Tags wickeln:

myLabel.setText("<html>"+ myString +"</html>"); 

Sie Sie müssen keine Break-Tags fest codieren. Der Text wird umbrochen, wenn die Größe der Komponente geändert wird.

+11

Das ist nicht ganz richtig ist. Wenn Sie HTML verwenden, können Sie die Break-Tags * hart codieren. Wenn Sie jedoch HTML verwenden und die maximale Größe zuweisen, wird der Text automatisch umbrochen. –

+2

Wenn Sie sich entscheiden, Tags hart zu codieren, stellen Sie sicher, dass Sie
und nicht
verwenden, da Java 5 letzteres nicht mag. – Craigo

+0

Ich mag die zweite Idee, weil die erste ein Wort auf die Hälfte brechen kann und was ich will, ist Word-Wrapping – shareef

40

Ja, es gibt zwei ähnliche Weise (erste mit CSS style = "width: ... px", das zweite mit html WIDTH = ...:

1.

labelText = String.format("<html><div style=\"width:%dpx;\">%s</div><html>", width, text); 

2.

labelText = String.format("<html><div WIDTH=%d>%s</div><html>", width, text); 
+5

Die ganze Sache über die Verwendung von HTML, um Text-Wrap zu machen fühlt sich an wie ein Hack, aber es ist der einfachste Weg, um es zum Laufen zu bringen. Die Größe in der div ist genau das, was ich brauchte, um die JLabel Wrap mit einer maximalen Breite ohne Bibliotheken von Drittanbietern oder übermäßig komplizierte Hacks zu machen. –

+5

Was passiert, wenn sich die Fenstergröße ändert? Text muss entsprechend der neuen Etikettenbreite reflown werden, aber bei dieser Lösung müssten Sie ihn erneut einstellen. –

6

Es gibt eine gute Technik here, blättern Sie bis zum Ende des Artikels.

JLabel labelBeingUsed = myLabel; 
View view = (View) labelBeingUsed.getClientProperty(BasicHTML.propertyKey); 
view.setSize(scrollPane1.getWidth(), 0.0f); 
float w = view.getPreferredSpan(View.X_AXIS); 
float h = view.getPreferredSpan(View.Y_AXIS); 
labelBeingUsed.setSize((int) w, (int) h); 
33

oder einfach

myLabel.setText("<html>"+ myString +"</html>"); 
+0

Mit JDK 7 war das ausreichend, danke! 'JLabel lblTitle = neu JLabel (" Mein sehr, sehr langer Titeltext ");' – Matthieu

+2

Wenn Sie dies tun, sollten Sie sicherstellen, dass alle HTML-Entitäten in 'myString' zuerst maskiert werden. Wenn 'myString' etwas wie" Wert <5 "ist, wird es als" Wert 5 "angezeigt. –

11

JXLabel in den SwingX project Stützen verwenden

JXLabel label = new JXLabel(somelongtext); 
label.setLineWrap(true); 
+0

Danke, es funktioniert für mich. – ceklock

8

Umwickeln Sie HTML ohne harte Kodierung Umbrüche verwenden können, wenn Sie stattdessen Absatz-Tags verwenden.

JLabel biglabel = new JLabel("<html><p>A lot of text to be wrapped</p></html>"); 
+0

Aus irgendeinem Grund funktionierte das nicht für mich. p-Tags folgen einer Überschrift und der Text wird nicht umgebrochen. Ich habe das horizontale Scrollen deaktiviert, vielleicht hat das etwas damit zu tun. –

+0

Sie benötigen die p-Tags nicht. –

6

Anders als den Text in <html> Tags Einwickeln, müssen Sie auch das Etikett in einen Behälter, der die bevorzugte Höhe respektiert und setzt die Breite auf Maximum. Zum Beispiel können Sie das Etikett in den NORDEN eines BorderLayout setzen.

Hier ist ein einfaches, aber vollständiges Arbeitsprogramm, um dies zu veranschaulichen. Sie können die Größe des Rahmens beliebig ändern. Das Etikett wird die gesamte Breite einnehmen und die Höhe wird entsprechend angepasst, um den Text zu umhüllen. Beachten Sie, dass alles, was ich tue, <html> Tags verwendet und das Etikett in den NORD der BorderLayout setzt.

import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 
import javax.swing.JPanel; 
import javax.swing.JLabel; 
import java.awt.BorderLayout; 
import java.awt.Dimension; 

public class LabelWrap { 

    public static JPanel createPanel() { 
     JLabel label = new JLabel(); 
     label.setText("<html>" 
      + "<h3>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h3>" 
      + "<p>Duis a tincidunt urna. Phasellus tristique interdum mauris, " 
      + "ut vestibulum purus suscipit eget. Aenean massa elit, accumsan " 
      + "non faucibus vel, dictum placerat urna. In bibendum est sagittis " 
      + "urna iaculis quis sagittis velit commodo. Cum sociis natoque " 
      + "penatibus et magnis dis parturient montes, nascetur ridiculus " 
      + "mus. Nam quis lacus mauris. Phasellus sem libero, convallis " 
      + "mattis sagittis vel, auctor eget ipsum. Vivamus molestie semper " 
      + "adipiscing. In ac neque quis elit suscipit pharetra. Nulla at " 
      + "orci a tortor consequat consequat vitae sit amet elit. Praesent " 
      + "commodo lacus a magna mattis vehicula. Curabitur a hendrerit " 
      + "risus. Aliquam accumsan lorem quis orci lobortis malesuada.</p>" 
      + "<p>Proin quis viverra ligula. Donec pulvinar, dui id facilisis " 
      + "vulputate, purus justo laoreet augue, a feugiat sapien dolor ut " 
      + "nisi. Sed semper augue ac felis ultrices a rutrum dui suscipit. " 
      + "Praesent et mauris non tellus gravida mollis. In hac habitasse " 
      + "platea dictumst. Vestibulum ante ipsum primis in faucibus orci " 
      + "luctus et ultrices posuere cubilia Curae; Vestibulum mattis, " 
      + "tortor sed scelerisque laoreet, tellus neque consectetur lacus, " 
      + "eget ultrices arcu mi sit amet arcu. Nam gravida, nulla interdum " 
      + "interdum gravida, elit velit malesuada arcu, nec aliquam lectus " 
      + "velit ut turpis. Praesent pretium magna in nibh hendrerit et " 
      + "elementum tellus viverra. Praesent eu ante diam. Proin risus " 
      + "eros, dapibus at eleifend sit amet, blandit eget purus. " 
      + "Pellentesque eu mollis orci. Sed venenatis diam a nisl tempor " 
      + "congue.</p>" 
      + "</html>"); 

     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(label, BorderLayout.NORTH); 
     panel.setPreferredSize(new Dimension(640, 480)); 
     return panel; 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setContentPane(createPanel()); 
       frame.pack(); 
       frame.setVisible(true); 
      } 

     }); 
    } 

} 
-6

Wenn Sie nur JLabel verwenden, als Sie diesen Ansatz versuchen können,

nur die Anzahl der Zeichen angezeigt werden Sie auf dem Etikett mit Teilzeichenfolge Methode angezeigt werden soll.

public void setLabel(String label){ 
    String dispLabel=label.substring(0, numOfCharacter); 
    labelComponent.setText(dispLabel); 
} 
Verwandte Themen