Wie kann ich eine JTextArea mit einer bestimmten Breite und die kleinste mögliche Höhe erforderlich, um alle den text?
In allen Beispielen, die ich finden kann, verwenden Sie eine JTextArea
die Höhe & Breite bekannt ist, vor der Erstellung des JTextArea
, und wenn die JTextArea
erfordern würde, mehr Höhe, dann ist es in einer JScrollPane
. Offensichtlich, die Höhe der JTextArea
ist abhängig von der Breite und der text-Inhalt.
Nun, meine situation erfordert, dass ich nicht mit einem JScrollPane
, sondern dass der JTextArea
gerade groß genug, um der gesamte text angezeigt wird. Wenn ich die JTextArea
, ich weiß, der text-Inhalt ist und wie viel Breite wird es haben, mit zu arbeiten; ich weiß nicht, die Höhe - ich will das so klein wie möglich, ohne schneiden Sie den text. Dies scheint sehr schwer zu erreichen.
Als eine Randnotiz, die JTextArea
Hinzugefügt werden, um eine JPanel
, die nicht über eine layout-manager - es verwendet die absolute Positionierung auf der Grundlage der hinzugefügten Komponente bevorzugte Größe. Dies erfordert, dass meine JTextArea
zurückkehren würde, die richtigen Maße, auf getPreferredSize()
. Die richtigen Maße sollten die Breite, die ich angegeben habe, als ich konstruiert, und die minimale Höhe, die erforderlich ist, um alle den text mit der vorgesehenen Breite.
Ich habe festgestellt, dass einige ähnliche threads, diskutieren die Merkwürdigkeiten/bugs mit den beteiligten JTextArea
sind manchmal löste durch den Aufruf pack()
zweimal auf den übergeordneten container. Dies ist nicht eine option für mich. Ich bin versucht zu schaffen im Grunde meine eigene JTextArea
nimmt eine Breite und String und berechnet die erforderliche Mindest-Höhe basierend auf der Breite und schriftart-Einstellungen, aber ich dachte, ich würde bitten, um den ersten, bevor Sie verbringen die Zeit, das zu tun.
Hoffentlich wird meine Frage klar ist. Danke Euch allen für Eure Hilfe!!!
Thompson Sicher, ich könnte mit einem
JLabel
, aber dann würde ich immer noch manuell einfügen Zeilenumbrüche in den string, das würde von mir verlangen, um zu berechnen, wo Sie sein sollten, basierend auf der Breite und schriftart-Einstellungen, und dann muss ich fügen Sie einige spezielle Handhabung zu machen, wickeln Sie auf ganze Wörter anstelle Zeichen. Dies sind Dinge, die zur Verfügung gestellt von der JTextArea
, so würde ich es vorziehen, zu verwenden, wenn ich kann.Siehe Beispiel unten. Ich möchte ein wenig "HTML-trick", das zu erreichen, solche Dinge. 😉
InformationsquelleAutor Nate W. | 2010-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt wie die Aufgabe eines layout-MANAGERS.
...it uses absolute positioning based on the added component's preferred size
war, dass diese Methode stützte sich auf also muss es richtig sein.Wow!!! Dieser funktioniert! Vielen, vielen Dank! Ich nie würde gedacht haben, dieses zu versuchen.
Sie sind nicht gezwungen, zu einem einzigen layout maanger. Sie können verschachtelte panels mit verschiedenen layout-Managern den job zu erledigen. Wieder "die Bestimmung der position auf die bevorzugte Größe der Komponente" ist genau die Aufgabe eines layout-MANAGERS. Wenn Sie nicht wie die bereits vorhandenen layout-Manager, dann schreiben Ihre eigenen. Dies ist, was Sie tun sowieso, außer wenn Sie diese implementieren das interface LayoutManager haben Sie eine bekannte Schnittstelle zu code.
Ich verstehe, dass ich die Schachteln von layout-Managern, und in der Tat, dass ist genau das, was ich getan habe. Ich bin nach unten, um eine verschachtelte Ebene, wo es keinen layout-manager, die genau das macht, was ich brauche, so habe ich die absolute Positionierung. Als ich beim schreiben meines eigenen layout-manager, aber entschieden, um zu sehen, ob ich es Arbeit bilden könnte, bevor Sie sich entscheiden, ob er es Wert wäre, um diese Logik in einem layout-manager. Nochmals vielen Dank!
Für mich ist die Antwort 000: java.das awt.Dimension[width=100,height=16] 100: java.das awt.Dimension[width=100,height=48]. Ich Frage mich, wie window-Manager befassen sich mit Komponenten, die mit wechselnden dimentia wie anscheinend JTextFields...
InformationsquelleAutor camickr
body
tag.InformationsquelleAutor Andrew Thompson
Die beschriebene Lösung in FixedWidthLabel , mit
<html><body width="..."
erfordert die Programmierer, um die Nachricht als Teil der html-string.
Wenn die Nachricht ist so etwas wie
invalid integer: i<0 not allowed
,dann die
<
müssen escaped werden (verschlüsselt?), ansonsten gibt es nicht zu sagen, wie JLabel interpretieren den html -.Dies erhöht die Komplexität dieser Lösung.
Nur, wenn Sie wissen, dass die Nachricht enthält keine solche Zeichen, werden Sie in Ordnung.
InformationsquelleAutor pvbemmelen62
Gut, vielleicht, wenn Sie wissen, dass Ihre Breite könnte man einige tests und arbeiten Sie heraus, wie weit jedes Zeichen des Textes ist, so könnte man eine Schleife verwenden, um zu bestimmen, wie viele Zeichen passen auf jede Zeile und die Gesamtzahl der Zeichen, die dargestellt werden sollen, dann könnte man die Höhe auf der Grundlage, wie viele Zeilen es sind.
Sagen, dein text hat 1000 Zeichen, einschließlich Leerzeichen, und die Breite der Zeichen ist äquivalent zu 4pixels, dann können Sie herauszufinden, ob die Breite ist 400, die 100 Zeichen passen auf jede Zeile, danach müssen Sie 10 Linien. Jetzt sagen die Höhe ist 10 für die Schriftgröße, die Sie jetzt wissen müssen Sie 10 x 10 == 100 Pixel, so dass Ihr TextArea sollte 400x100
Vielen Dank für Ihre Antwort, aber wie gesagt, dieser Ansatz funktioniert nicht ganz, wenn ich will, zu unterstützen, variable-sized-schriftart (die ich brauche). Plus, diese sind alle Dinge, die zur Verfügung gestellt von der
JTextArea
, so möchte ich lieber nicht das Rad neu zu erfinden.InformationsquelleAutor DaneAU