此問題看起來微不足道,但我找不到解決方案。如何設置jTextArea具有與其包含的文本大小相匹配的高度(以避免滾動條)
當我創建表單時,它包含一個JTextArea
。我想把大的常量文本放在裏面。如果文本長度爲1000行,我希望我的JTextArea
爲1000行(足夠大以顯示沒有滾動條的整個文本)。 JTextArea
在一個面板中可以有滾動條,所以當它變得太大時(這個面板中有兩個JTextArea
,就像在diff工具中一樣),它不是問題。有誰知道我怎麼能做到這一點?謝謝。
此問題看起來微不足道,但我找不到解決方案。如何設置jTextArea具有與其包含的文本大小相匹配的高度(以避免滾動條)
當我創建表單時,它包含一個JTextArea
。我想把大的常量文本放在裏面。如果文本長度爲1000行,我希望我的JTextArea
爲1000行(足夠大以顯示沒有滾動條的整個文本)。 JTextArea
在一個面板中可以有滾動條,所以當它變得太大時(這個面板中有兩個JTextArea
,就像在diff工具中一樣),它不是問題。有誰知道我怎麼能做到這一點?謝謝。
的BorderLayout
將處理滾動條開箱,如果你只是把你的JTextArea
在JScrollPane
將其添加到您的JPanel
之前。另一方面,FlowLayout
沒有。它不會顯示滾動條,除非像@Xorty暗示的那樣,您在JScrollPane
上打電話setPreferedSize()
,並給它一個你想要的維度。
更改爲FlowLayout解決了我的問題。謝謝。 – celicni 2010-06-21 00:40:21
嗯,首先:它的JTextArea不是jTextArea。
現在把JTextArea放入JScrollPane中。當輸入文本時,請致電JScrollPane的getPreferedSize()
- 它會爲您提供顯示整個文本所需的精確大小。另外,我從來不使用其他佈局管理器,而是使用NetBeans Swing構建器的「免費設計」 - 所以我不確定其他佈局管理器在那裏的表現如何。
謝謝。但首先,不依賴於JTextArea/JScrollPane高度, jScrollPane1.getPreferredSize()。getHeight()返回91.0。那是什麼意思? 而第二件事,我該如何處理jScrollPane1.getPreferredSize()?如果我將它傳遞給jTextArea().setSize()或jTextArea.setMinimumSize,則不起作用。如果我將它傳遞給jTextArea.setPreferredSize(),結果是scollbar消失了,但JTextArea沒有展開以適應文本(因此我無法訪問整個文本)。 – celicni 2010-06-20 23:30:04
您也可以使用這樣的事情(寬度有限,根據文本高度,有用的信息顯示消息時):
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;
}
要增加或減少的JTextArea的高度。當輸入文本時,調用JTextArea的getPreferredSize() - 它會給你顯示整個文本所需的大小。 之後,使用JScrollPane的setPrefferedSize()來設置JTextArea的大小
那麼,我試圖找到NetBeans中的一些選項來設置它自動展開,我試圖找到一種方法來以編程方式設置此行爲,但沒有成功(setSize方法不會改變大小..) – celicni 2010-06-21 00:06:51