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.
You can use JTextArea#setLineWrap(true) by default is set to false. Sets the line-wrapping policy of the text area. If set to true the lines will be wrapped if they are too long to fit within the allocated width. If set to false, the lines will always be unwrapped.
The main difference between JTextField and JTextArea in Java is that a JTextField allows entering a single line of text in a GUI application while the JTextArea allows entering multiple lines of text in a GUI application.
The JTextArea class provides a component that displays multiple lines of text and optionally allows the user to edit the text.
Constructs a new TextArea. A default model is set, the initial string is null, and rows/columns are set to 0.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With