2010-06-20 7 views
5

이 문제는 간단 해 보이지만 솔루션을 찾을 수 없습니다.jTextArea가 포함 된 텍스트의 크기와 일치하는 높이를 갖도록 설정하는 방법 (스크롤 막대를 피하기 위해)

양식을 만들 때 JTextArea이 포함되어 있습니다. 나는 그것에 큰 상수 텍스트를 넣고 싶다. 텍스트의 길이가 1000 라인이라면, JTextArea을 1000 라인 높이 (스크롤 바를 사용하지 않고 전체 텍스트를 표시 할 수있을만큼 커야 함)로 설정합니다. JTextArea은 스크롤 바를 가질 수있는 패널 안에 있으므로 크기가 너무 커지면 문제가되지 않습니다 (이 패널에는 두 개의 diffr 도구에있는 것처럼 JTextArea이 있습니다). 아무도 내가 이것을 어떻게 얻을 수 있는지 안다? 감사.

+0

NetBeans에서 자동으로 확장되도록 설정하려고 시도했습니다. 프로그래밍 방식으로이를 설정하는 방법을 찾으려고했습니다. 동작하지만 성공하지 못했습니다 (setSize 메서드는 크기를 변경하지 않습니다 ..) – celicni

답변

5

BorderLayout는 상자에서 스크롤을 처리합니다. 반면에 FlowLayout은 그렇지 않습니다. @Xorty intimates처럼 JScrollPanesetPreferedSize()을 호출하고 원하는 크기를 지정하지 않으면 스크롤 막대가 표시되지 않습니다.

+0

FlowLayout으로 변경하면 문제가 해결되었습니다. 감사. – celicni

0

음, 우선 JTextArea가 아닌 JTextArea입니다.

이제 JTextArea를 JScrollPane에 넣으십시오. 텍스트를 입력하면 JScrollPane의 getPreferedSize()을 호출하면 전체 텍스트를 표시하는 데 필요한 정확한 크기를 얻을 수 있습니다. 또한 NetBeans Swing 빌더의 'Free Design'이 아닌 다른 LayoutManager를 사용하지 않으므로 다른 LayoutManager가 어떻게 작동하는지 잘 모르겠습니다. 당신이 당신의 JPanel에 추가하기 전에 단순히 JScrollPaneJTextArea를 넣으면

+0

감사. 하지만 먼저 JTextArea/JScrollPane 높이에 의존하지 않고 jScrollPane1.getPreferredSize(). getHeight()는 91.0을 반환합니다. 그게 무슨 뜻 이죠? 둘째, jScrollPane1.getPreferredSize()로 무엇을 할 수 있습니까? jTextArea(). setSize() 또는 jTextArea.setMinimumSize에 전달하면 효과가 없습니다. jTextArea.setPreferredSize()에 전달하면 scollbar가 사라졌지만 JTextArea가 텍스트에 맞게 확장되지 않아 (따라서 전체 텍스트에 액세스 할 수 없음) 효과가 있습니다. – celicni

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의 크기를 설정하십시오.