How to set jTextArea to have height that matches the size of a text it contains (to avoid scrollbars)
Asked Answered
R

4

5

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.

Rupee answered 20/6, 2010 at 22:39 Comment(1)
Well, I've tried to find some option in NetBeans to set it to automatically expand, and I've tried to find a method to programatically set this behavior, but without success (setSize methods don't change the size..)Rupee
C
6

The BorderLayout will handle the scrollbar out of the box if you simply put your JTextAreain 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.

Cambodia answered 20/6, 2010 at 23:54 Comment(0)
C
4

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;

}
Channel answered 21/6, 2010 at 14:38 Comment(0)
C
1

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

Counseloratlaw answered 23/2, 2013 at 8:59 Comment(0)
F
0

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.

Footpath answered 20/6, 2010 at 23:3 Comment(1)
Thanks. But first thing, not depending on the JTextArea/JScrollPane height, jScrollPane1.getPreferredSize().getHeight() returns 91.0. What does that mean? And second thing, what whould I do with jScrollPane1.getPreferredSize()? if I pass it into jTextArea().setSize() or jTextArea.setMinimumSize, there is no effect. If I pass it into jTextArea.setPreferredSize(), the effect is that the scollbar is gone, but JTextArea has not expanded to fit the text (therefore I can't access the entire text).Rupee

© 2022 - 2024 — McMap. All rights reserved.