Reputation: 520
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 panel 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.
Upvotes: 5
Views: 16679
Reputation: 831
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
Upvotes: 1
Reputation: 491
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;
}
Upvotes: 4
Reputation: 39485
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.
Upvotes: 6
Reputation: 18861
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.
Upvotes: 0