2010-06-20 20 views
5

此問題看起來微不足道,但我找不到解決方案。如何設置jTextArea具有與其包含的文本大小相匹配的高度(以避免滾動條)

當我創建表單時,它包含一個JTextArea。我想把大的常量文本放在裏面。如果文本長度爲1000行,我希望我的JTextArea爲1000行(足夠大以顯示沒有滾動條的整個文本)。 JTextArea在一個面板中可以有滾動條,所以當它變得太大時(這個面板中有兩個JTextArea,就像在diff工具中一樣),它不是問題。有誰知道我怎麼能做到這一點?謝謝。

+0

那麼,我試圖找到NetBeans中的一些選項來設置它自動展開,我試圖找到一種方法來以編程方式設置此行爲,但沒有成功(setSize方法不會改變大小..) – celicni 2010-06-21 00:06:51

回答

5

BorderLayout將處理滾動條開箱,如果你只是把你的JTextAreaJScrollPane將其添加到您的JPanel之前。另一方面,FlowLayout沒有。它不會顯示滾動條,除非像@Xorty暗示的那樣,您在JScrollPane上打電話setPreferedSize(),並給它一個你想要的維度。

+0

更改爲FlowLayout解決了我的問題。謝謝。 – celicni 2010-06-21 00:40:21

0

嗯,首先:它的JTextArea不是jTextArea。

現在把JTextArea放入JScrollPane中。當輸入文本時,請致電JScrollPane的getPreferedSize() - 它會爲您提供顯示整個文本所需的精確大小。另外,我從來不使用其他佈局管理器,而是使用NetBeans Swing構建器的「免費設計」 - 所以我不確定其他佈局管理器在那裏的表現如何。

+0

謝謝。但首先,不依賴於JTextArea/JScrollPane高度, jScrollPane1.getPreferredSize()。getHeight()返回91.0。那是什麼意思? 而第二件事,我該如何處理jScrollPane1.getPreferredSize()?如果我將它傳遞給jTextArea().setSize()或jTextArea.setMinimumSize,則不起作用。如果我將它傳遞給jTextArea.setPreferredSize(),結果是scollbar消失了,但JTextArea沒有展開以適應文本(因此我無法訪問整個文本)。 – celicni 2010-06-20 23:30:04

4

您也可以使用這樣的事情(寬度有限,根據文本高度,有用的信息顯示消息時):

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; 

} 
1

要增加或減少的JTextArea的高度。當輸入文本時,調用JTextArea的getPreferredSize() - 它會給你顯示整個文本所需的大小。 之後,使用JScrollPane的setPrefferedSize()來設置JTextArea的大小

相關問題