Wie stellt man JTextArea Höhe zu haben, die die Größe eines Textes passt es (zur Vermeidung von Bildlaufleisten) enthält
-
28-09-2019 - |
Frage
Dieses Problem sieht trivial, aber ich kann die Lösung nicht finden.
Wenn ich ein Formular erstellen, enthält es eine JTextArea
. Ich mag es großen konstanten Text setzen. Wenn der Text sagt 1000 Zeilen lang, ich meine JTextArea
wollen 1000 Zeilen hoch sein (zu groß genug sein, um den gesamten Text ohne Bildlaufleisten angezeigt werden). JTextArea
innerhalb einer Platte ist, die Scrollbar haben kann, so dass es kein Problem ist, wenn sie zu groß werden (es gibt zwei JTextArea
in diesem Panel .. so etwas wie in einem Diff-Tool). Hat jemand weiß, wie kann ich das erreichen? Danke.
Lösung
Die BorderLayout
die Scrollbar aus der Box umgehen, wenn Sie einfach Ihre JTextArea
in ein JScrollPane
setzen, bevor Sie es zu Ihrem JPanel
hinzufügen. FlowLayout
, auf der anderen Seite nicht. Es wird nicht die Bildlaufleiste angezeigt werden, es sei denn, als @Xorty Vertrauten, Sie setPreferedSize()
auf JScrollPane
aufrufen und die Dimension geben, die Sie möchten.
Andere Tipps
Sie können auch so etwas wie dieses verwenden (begrenzte Breite, Höhe abhängig von Text, nützlich bei der Anzeige Info-Nachrichten):
public JTextArea createTextAreaFitToText(String message, Dimension minimalSize){
JTextArea aMessagePanel = new JTextArea();
aMessagePanel.setText(message);
/*for modelToView to work, the text area has to be sized. It doesn't matter if it's visible or not.*/
aMessagePanel.setPreferredSize(minimalSize);
aMessagePanel.setSize(minimalSize);
Rectangle r = aMessagePanel.modelToView(aMessagePanel.getDocument().getLength());
Dimension d = new Dimension(minimalSize.width, r.y + r.height);
aMessagePanel.setPreferredSize(d);
return aMessagePanel;
}
So erhöhen oder die Höhe des JTextArea zu verringern. Wenn ein Text eingegeben wird, Anruf für getPreferredSize () von JTextArea- wird es Ihnen, die Größe benötigt geben, den gesamten Text anzuzeigen. Nach diesem Einsatz setPrefferedSize () von JScrollPane die Größe JTextArea einstellen
Nun, zunächst einmal: es ist JTextArea nicht JTextArea
. Nun - setzen JTextArea in JScrollPane. Wenn ein Text eingegeben wird, Anruf für getPreferedSize()
von JScrollPane - es wird Ihnen genaue Größe geben benötigte ganzen Text anzuzeigen. Auch ich andere Layoutmanager als ‚Free Design‘ von NetBeans nie builder Schwingen - so bin ich nicht sicher, wie andere LayoutManagers verhält es