How to set jTextArea to have height that matches the size of a text it contains (to avoid scrollbars)
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 my JTextArea
to be 1000 lines high (to be large enough to display the entire text without scrollbars). JTextArea
is inside a p开发者_Go百科anel which can have scrollbar so it is not a problem when it gets too large (there are two JTextArea
in that panel.. something like in a diff tool). Does anybody knows how can I achieve this? Thanks.
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.
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;
}
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
Well, first of all : it's JTextArea not jTextArea.
Now - put JTextArea into JScrollPane. When a text is entered, call for getPreferedSize()
of JScrollPane - it'll give you precise size needed to display whole text. Also, I never use other LayoutManager than 'Free Design' from NetBeans Swing builder - so I am not sure how other LayoutManagers will behave there.
精彩评论