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.
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)
Tags und Links java swing layout-manager