How to set jTextArea to have height that matches the size of a text it contains (to avoid scrollbars)
Solution 1
The BorderLayout
will handle the scrollbar out of the box if you simply put your JTextArea
in a JScrollPane
before you add it to your JPanel
. FlowLayout
, on the other hand, does not. It will not display the scroll bar unless, as @Xorty intimates, you call setPreferedSize()
on your JScrollPane
and give it the dimension that you would like.
Solution 2
You can also use something like this (limited width, height depending on text, useful when showing info messages):
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;
}
Solution 3
To increase or decrease the height of JTextArea. When a text is entered, call for getPreferredSize() of JTextArea- it'll give you the size needed to display the whole text. After that use setPrefferedSize() of JScrollPane to set the size of JTextArea
celicni
Updated on June 04, 2022Comments
-
celicni almost 2 years
This problem looks trivial, but I can't find the solution.
When I create a form it contains a
JTextArea
. I want to put large constant text in it. If the text is say 1000 lines long, I want myJTextArea
to be 1000 lines high (to be large enough to display the entire text without scrollbars).JTextArea
is inside a panel which can have scrollbar so it is not a problem when it gets too large (there are twoJTextArea
in that panel.. something like in a diff tool). Does anybody knows how can I achieve this? Thanks.