Wie stellt man JTextArea Höhe zu haben, die die Größe eines Textes passt es (zur Vermeidung von Bildlaufleisten) enthält

StackOverflow https://stackoverflow.com/questions/3081210

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.

War es hilfreich?

Lösung

Die BorderLayout die Scrollbar aus der Box umgehen, wenn Sie einfach Ihre JTextAreain 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

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top