2017-10-05 8 views
0

다른 메소드를 호출하여 JFrame을 작성할 수있는 클래스를 만들려고합니다. 그러나 어딘가에 내 JTextArea에이 길을 잃지하는 선 ... 함께 아래 메소드를 통해 빌드 할 때 JTextArea가 JScrollPane에 표시되지 않습니다.

내가 구축을 시작하는 데 필요한 방법을 보유하고 앱라는 클래스는 ...입니다

public class App { 
    private JFrame frame = new JFrame(); 
    private JTextArea textArea = new JTextArea(); 
    private JScrollPane scrollPane = new JScrollPane(); 

    public void openJFrame(String title, int x, int y){ 
     JFrame.setDefaultLookAndFeelDecorated(true); 
     frame.setTitle(title); 
     frame.setSize(x, y); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
    public JFrame getJFrame(){ 
     return frame; 
    } 
    public void addJTextArea(JScrollPane scrollPane){ 
     scrollPane.add(textArea); 
     textArea.setLineWrap(true); 
     textArea.setEditable(true); 
     textArea.setVisible(true); 
    } 
    public JTextArea getJTextArea(){ 
     return textArea; 
    } 
    public void addJScrollPane(JFrame frame){ 
     frame.add(scrollPane); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 

    } 
    public JScrollPane getJScrollPane(){ 
     return scrollPane; 
    } 
나는에서이 클래스를 호출하고 싶은

내 주요 방법 및 빌드 JFrame. 아래는 나의 시도입니다. JFrame를하고 ScrollPane에 표시됩니다 무엇 happense

public class Main { 
    public static void main(String[] args){ 
     App app = new App(); 

     app.addJTextArea(app.getJScrollPane()); 
     app.addJScrollPane(app.getJFrame()); 
     app.openJFrame("title", 500, 500); 
    } 

.. 그러나 내 텍스트 영역 스크롤 창에 추가 될 것 같지 않습니다.

내가 오해 또는 간과하고 있습니까? 그것을 내가 (분명히 스크롤 창없이)가 나타납니다 JScrollPane의 방법을 사용하지 않고 JFrame의에 직접 추가 addJTextArea 방법의 경우 JScrollPane가 보일 수 있지만

답변

2

이/행위가/JPanel 비슷한 소리가 협조 할 수있다 아니다. 따라서 스크롤 창에 구성 요소를 추가하는 데 JScrollPane.add()을 사용하면 자연스럽지 만 잘못되었습니다. JScrollPane은 스크롤하는 내부에 하나의 구성 요소 만 가질 수 있으므로 add()은 잘못되었지만 setViewportView()은 사용할 방법입니다.

당신은 scrollPane.add() 대신 scrollPane.setViewportView()를 사용하도록 방법 addJTextArea을 적응해야 :

public void addJTextArea(JScrollPane scrollPane){ 
    scrollPane.setViewportView(textArea); 
    textArea.setLineWrap(true); 
    textArea.setEditable(true); 
    textArea.setVisible(true); 
}