2011-10-04 4 views
0

다음 SSCCE에서 수직 스크롤 막대를 사용하는 것이 가능할지라도 수평 스크롤 막대가 나타납니다. 이것은 단지 예일뿐입니다. BoxLayout은 아니고, 독자적인 LayoutManager를 사용하고 있습니다 만, 이것에 대한 해결책이 있으면, 아마 독자적인 LayoutManager로 사용할 수 있습니다.스윙 박스 수직 스크롤 막대가 보이면 수평 스크롤 막대가 생깁니다.

Scrollable을 구현하는 사용자 지정 JPanel을 사용하여 이미 시도한 다음 TrackScrollableViewportWidth를 재정 의하여 true를 반환했지만 원하는 결과를 얻지 못했습니다. 텍스트는 그 다음 오른쪽에서 잘려나갔습니다.

또 다른 것은 중요하지 않지만 여전히 귀찮다. 창 너비를 늘리면 가로 스크롤 막대가 사라지고 JTextArea도 너비가 늘어납니다. 그러나 창 너비를 줄이면 JTextArea는 너비를 적절하게 조정하지 않습니다.

미리 감사드립니다. 여기에 SSCCE가 있습니다 :

import java.awt.BorderLayout; 
import java.awt.Color; 

import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.WindowConstants; 

public class MyFrame extends JFrame 
{ 
    private static final long serialVersionUID = 1L; 

    public static void main(final String[] args) 
    { 
     new MyFrame(); 
    } 

    private MyFrame() 
    { 

     setTitle("Scrollbars and width"); 
     setSize(800, 200); 
     setResizable(true); 
     setVisible(true); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

     final JPanel container = new JPanel(); 
     final BoxLayout layout = new BoxLayout(container, BoxLayout.Y_AXIS); 
     container.setLayout(layout); 

     final JTextArea area1 = new JTextArea(); 
     area1.setText("1sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf "); 
     area1.setLineWrap(true); 
     area1.setWrapStyleWord(true); 
     area1.setEditable(false); 
     area1.setForeground(Color.RED); 
     container.add(area1); 

     final JTextArea area2 = new JTextArea(); 
     area2.setText("2sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf "); 
     area2.setLineWrap(true); 
     area2.setWrapStyleWord(true); 
     area2.setEditable(false); 
     area2.setBackground(Color.RED); 
     container.add(area2); 

     final JScrollPane scrollbox = new JScrollPane(container); 

     this.getContentPane().add(scrollbox, BorderLayout.CENTER); 

     this.getContentPane().invalidate(); 
     this.getContentPane().validate(); 

    } 
} 

답변

1

BoxLayout과 관계가 없으므로 확인을 위해 1 열 GridLayout으로 변경하십시오.

이유는 (아마도) 텍스트 영역의 약간 이상한 크기 조정 동작입니다. 즉, 실제 작업을 수행하기 전에 (즉 LayoutManager로 크기 조정) 내부 초기화에 약간의 변경이 필요합니다. 가짜 크기의 전화를 추가하면 (지역 설정 중 어딘가에서) 정확한 값은 무의미합니다.

area1.setSize(1, Short.MAX_VALUE); 
관련 문제