Höhe von mehrzeiligem Text mit fester Breite erhalten, damit das Dialogfeld korrekt skaliert wird

8

Ich möchte ein Dialogfeld erstellen, das eine Art Textelement (JLabel / JTextArea usw.) enthält, das mehrere Zeilen enthält und die Wörter umschließt. Ich möchte, dass der Dialog eine feste Breite hat, aber passen Sie die Höhe an, je nachdem, wie groß der Text ist. Ich habe diesen Code:

%Vor%

Beim Ausführen des Programms sieht es so aus: alt text http://lesc.se/stackoverflow/multiline_size_1.png

Aber ich möchte, dass der Dialog so aussieht (wie beim Drücken des Pack-Buttons): alt text http://lesc.se/stackoverflow/multiline_size_2.png

Ich vermute, dass das Problem darin bestand, dass der Layout-Manager nicht in der Lage war, die richtige Höhe des Textes zu bestimmen, bevor er auf dem Bildschirm angezeigt wurde. Ich habe verschiedene validate (), invalidate (), validateTree () usw. ausprobiert, aber nicht erfolgreich.

    
Lennart Schedin 26.06.2009, 09:33
quelle

3 Antworten

4

Ich habe eine Lösung für mein Problem gefunden. Ersetzen Sie JLabel durch JTextArea:

%Vor%

Und Aufruf von pack (), gefolgt von einem Aufruf an den Layout-Manager, um die Komponenten erneut zu erstellen, gefolgt von einem weiteren Paket:

%Vor%

Dadurch wird der Layout-Manager an die Breite angepasst.

Der vollständige Code:

%Vor%

(Sie können einige Anpassungen hinzufügen (Rahmen, Farbe usw.), so dass es genau wie das JLabel aussieht, aber ich habe das weggelassen)

    
Lennart Schedin 26.06.2009, 12:13
quelle
10

Hier ist eine Anpassung Ihres Codes, was Sie tun wollen. Aber es braucht einen kleinen Trick, um die Größe des Etiketts zu berechnen und seine bevorzugte Größe festzulegen.

Ich habe die Lösung hier gefunden

%Vor%     
Laurent K 26.06.2009 10:18
quelle
5

Ich denke, das ist was du willst:

%Vor%

Dadurch wird das JLabel auf 200 Pixel Breite beschränkt und die Höhe automatisch an den Text angepasst.

    
Jason 10.08.2011 15:21
quelle

Tags und Links