开发者

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

开发者 https://www.devze.com 2023-01-04 15:50 出处:网络
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 JText

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 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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号