2010-06-20 3 views
5

Dieses Problem sieht trivial aus, aber ich kann die Lösung nicht finden.Wie setze ich jTextArea auf Höhe, die der Größe eines enthaltenen Textes entspricht (um Scrollbalken zu vermeiden)

Wenn ich ein Formular erstelle, enthält es eine . Ich möchte einen großen konstanten Text darin einfügen. Wenn der Text 1000 Zeilen lang ist, möchte ich, dass meine 1000 Zeilen hoch ist (groß genug, um den gesamten Text ohne Bildlaufleisten anzuzeigen). JTextArea ist in einem Panel, das Scrollbar haben kann, so ist es kein Problem, wenn es zu groß wird (es gibt zwei in diesem Panel .. etwas wie in einem Diff-Tool). Weiß jemand wie ich das erreichen kann? Vielen Dank.

+0

Nun zu setzen, ich habe versucht, es zu erweitern, um automatisch zu setzen einige Option in NetBeans zu finden, und ich habe versucht, diese eine Methode zu finden, um programmatisch eingestellt Verhalten, aber ohne Erfolg (setSize Methoden ändern nicht die Größe ..) – celicni

Antwort

5

Die BorderLayout die Scrollbar aus der Box umgehen, wenn Sie einfach Ihre JTextArea in einem JScrollPane setzen, bevor Sie es zu Ihrem JPanel hinzufügen. FlowLayout, auf der anderen Seite, nicht. Es wird die Bildlaufleiste nicht angezeigt, es sei denn, wie @Xorty anklingt, rufen Sie setPreferedSize() auf Ihrem JScrollPane an und geben Sie ihm die Dimension, die Sie möchten.

+0

Das Wechseln zu FlowLayout hat mein Problem gelöst. Vielen Dank. – celicni

0

Nun, vor allem: es ist JTextArea nicht jTextArea.

Jetzt - setzen Sie JTextArea in JScrollPane. Wenn ein Text eingegeben wird, rufen Sie getPreferedSize() von JScrollPane - es gibt Ihnen genaue Größe benötigt, um den gesamten Text anzuzeigen. Außerdem verwende ich nie einen anderen LayoutManager als 'Free Design' von NetBeans Swing Builder - daher bin ich mir nicht sicher, wie sich andere LayoutManager dort verhalten werden.

+0

Danke. Aber zuerst, nicht abhängig von der JTextArea/JScrollPane-Höhe, jScrollPane1.getPreferredSize(). GetHeight() gibt 91.0 zurück. Was bedeutet das? Und die zweite Sache, was ich mit jScrollPane1.getPreferredSize() tun könnte? Wenn ich es in jTextArea() .setSize() oder jTextArea.setMinimumSize überlasse, gibt es keinen Effekt. Wenn ich es in jTextArea.setPreferredSize() übergebe, ist der Effekt, dass die Scollbar weg ist, aber JTextArea wurde nicht erweitert, um den Text anzupassen (daher kann ich nicht auf den gesamten Text zugreifen). – celicni

4

Sie können auch so etwas wie diese verwenden (begrenzte Breite, Höhe auf Text abhängig, nützlich, wenn Info-Meldungen angezeigt):

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; 

} 
1

Um die Höhe JTextArea zu erhöhen oder zu verringern. 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. Nach diesem Einsatz setPrefferedSize() von JScrollPane die Größe JTextArea

Verwandte Themen