5 Stimmen

Wie kann man jTextArea so einstellen, dass die Höhe mit der Größe des enthaltenen Textes übereinstimmt (um Scrollbars zu vermeiden)

Dieses Problem sieht trivial aus, aber ich kann die Lösung nicht finden.

Wenn ich ein Formular erstelle, enthält es eine JTextArea . Ich möchte einen großen konstanten Text einfügen. Wenn der Text z.B. 1000 Zeilen lang ist, möchte ich meine JTextArea 1000 Zeilen hoch sein (so groß, dass der gesamte Text ohne Bildlaufleisten angezeigt werden kann). JTextArea befindet sich in einem Panel, das eine Bildlaufleiste haben kann, so dass es kein Problem darstellt, wenn es zu groß wird (es gibt zwei JTextArea in diesem Panel etwas wie in einem Diff-Tool). Weiß jemand, wie ich das erreichen kann? Danke!

6voto

akf Punkte 37387

En BorderLayout wird die Bildlaufleiste ohne weiteres handhaben, wenn Sie einfach Ihre JTextArea in einem JScrollPane bevor Sie es zu Ihrem JPanel . FlowLayout andererseits nicht. Die Bildlaufleiste wird nicht angezeigt, es sei denn, wie @Xorty andeutet, Sie rufen setPreferedSize() zu Ihrem JScrollPane und geben Sie ihm die von Ihnen gewünschte Größe.

4voto

Taisin Punkte 481

Sie können auch etwas wie dieses verwenden (begrenzte Breite, Höhe abhängig vom Text, nützlich für die Anzeige von Informationsmeldungen):

  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;

}

1voto

sushant goel Punkte 771

So vergrößern oder verkleinern Sie die Höhe von JTextArea. Wenn ein Text eingegeben wird, rufen Sie getPreferredSize() von JTextArea auf - es gibt Ihnen die Größe, die benötigt wird, um den gesamten Text anzuzeigen. Danach verwenden Sie setPrefferedSize() von JScrollPane, um die Größe von JTextArea einzustellen.

0voto

Xorty Punkte 17626

Nun, zunächst einmal: es ist JTextArea nicht jTextArea.

Setzen Sie nun JTextArea in JScrollPane. Wenn ein Text eingegeben wird, rufen Sie nach getPreferedSize() von JScrollPane - es wird Ihnen genaue Größe benötigt, um den gesamten Text anzuzeigen. Außerdem habe ich nie andere LayoutManager als "Free Design" von NetBeans Swing Builder verwenden - so bin ich nicht sicher, wie andere LayoutManager dort verhalten wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X