2011-04-07 4 views
4

나는 JScrollPane의 내의 JTextArea에 표시하기 위해 노력하고있어,하지만 난 내 (간체) 프로그램을 실행할 때 그냥 빈 프레임을 얻을 :null LayoutManager를 사용하는 경우 JTextArea가 표시되는 JScrollPane이 표시되지 않는 이유는 무엇입니까?

import java.awt.Container; 
import java.awt.Dimension;  
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

public class ScrollPaneTest extends JFrame { 
    private Container myCP; 
    private JTextArea resultsTA; 
    private JScrollPane scrollPane; 

    public ScrollPaneTest() { 
     setSize(500, 500); 
     setLocation(100, 100); 
     myCP = this.getContentPane(); 
     myCP.setLayout(null); 

     resultsTA = new JTextArea("Blah blah"); 
     scrollPane = new JScrollPane(resultsTA, 
       JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
       JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setPreferredSize(new Dimension(200, 100)); 
     scrollPane.setLocation(100, 300); 
     myCP.add(scrollPane); 

     setVisible(true); 
     addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 
    } 

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

을 나는 '교과서와 일치하는 널의 LayoutManager를 사용 출신 교습.

+3

교과서가 수동 위치 한 번 크기를 가르치는 것보다 더 자주 널 LayoutManager의 주장한다면 (당신이 :-) 경험하는 통에 던져대로이라고 보여 huch 많은 작업에 의해 - 그것은 쓸모; -) 소위 널 레이아웃은 결코 노 - 노하지 않습니다 – kleopatra

+0

교과서는 내 부서의 수석 구성원과 좋은 친구입니다. :-) 나는 그녀에게이 과정을 한 번 가르치고있다. –

답변

7

이 작동합니다 :

public class ScrollPaneTest extends JFrame { 
    private Container myCP; 
    private JTextArea resultsTA; 
    private JScrollPane scrollPane; 

    public ScrollPaneTest() { 
     setSize(500, 500); 
     setLocation(100, 100); 
     myCP = this.getContentPane(); 
     myCP.setLayout(null); 

     resultsTA = new JTextArea("Blah blah"); 
     resultsTA.setBounds(10, 10, 150, 30); 

     scrollPane = new JScrollPane(resultsTA,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setPreferredSize(new Dimension(200, 100)); 
     scrollPane.setBounds(0, 0, 500, 500); 

     myCP.add(scrollPane); 
     setVisible(true); 
     addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 
    } 

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

것은 당신이 다음 범위를 지정해야합니다 널 (null) 레이아웃을 사용하는 경우.


편집

setBounds() 방법은 setLocation() 방법의 작업을 coveres. 예

, setBounds(x,y,w,h);

제 2 용기에 대해 그 요소의 X/Y의 위치를 ​​설정한다. 초 2 (w/h)는 해당 구성 요소의 크기를 설정합니다. 환언

-

  1. setBounds (INT의 X, INT의 Y, INT의 witdh, INT 높이)는 -
  2. 는 setLocation 구성 요소의 크기와 위치 (INT (X), INT의 Y)를 설정 - 구성 요소의 위치를 ​​설정하십시오.
+0

문제는 설명 된대로 스크롤 영역뿐만 아니라 텍스트 영역의 크기와 범위를 지정해야한다는 것입니다. –

+0

정말 고마워요! –

+0

언제나 환영합니다. –

1

이 항목에 대한 kleopatra 님의 의견에 동의해야합니다.

다음은 레이아웃을 사용하는 Harry Joy 코드의 변형입니다. 원래의 GUI와 거의 같은 크기이지만 화면 조정이 가능합니다. null 레이아웃이있는 반면 다른 PLAF, 기본 글꼴 크기 등에도 쉽게 적용됩니다 (화면 크기가 달라질 수는 있지만).

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ScrollPaneTest extends JFrame { 
    private Container myCP; 
    private JTextArea resultsTA; 
    private JScrollPane scrollPane; 

    public ScrollPaneTest() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocation(100, 100); 
     myCP = this.getContentPane(); 

     resultsTA = new JTextArea("Blah blah", 28, 43); 

     scrollPane = new JScrollPane(resultsTA,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

     myCP.add(scrollPane); 
     setVisible(true); 
     pack(); 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      public void run() { 
       new ScrollPaneTest(); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
+0

setDefaultCloseOperation() 또는 pack()에 대해 알지 못했습니다. 두 가지 모두 나에게 매우 유용 할 것입니다. 고맙습니다. –