2012-03-21 3 views
1

다음 코드에서 JTextArea를 기본 패널에 추가하면 표시되지 않습니다. controlPanel을 추가하면 가장자리가 아닌 가운데에 표시됩니다. 나는 GridBagLayout에 익숙하지 않아, 나는 간단한 것을 놓치고 있다고 가정하고있다.GridBagLayout이 JTextArea를 표시하지 않고 가운데에 패널을 표시합니다.

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSpinner; 
import javax.swing.JTextArea; 

public class Main { 

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

    public Main() { 
     JFrame frame = new JFrame(); 

     JPanel mainPanel = new JPanel(); 
     JPanel controlPanel = new JPanel(); 

     mainPanel.setLayout(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 

     controlPanel.add(new JButton("Play")); 
     controlPanel.add(new JButton("Pause")); 
     controlPanel.add(new JSpinner()); 
     JTextArea textArea = new JTextArea(); 

     c.gridx = 0; 
     c.gridy = 0; 
     c.gridheight = 3; 
     c.gridwidth = 3; 
     mainPanel.add(textArea, c); 
     // mainPanel.add(controlPanel, c); 
     frame.add(mainPanel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(700, 700); 
     frame.setLocation(250, 100); 
     frame.setVisible(true); 
    } 
} 

편집 : 제약 제안 후 어떻게 보이는지이입니다. textArea가 여전히 표시되지 않습니다.

 c.gridx = 0; 
     c.gridy = 0; 
//  c.gridheight = 3; 
//  c.gridwidth = 3; 
     c.weightx = 1.0; 
     c.weighty = 1.0; 
     c.anchor = GridBagConstraints.NORTHWEST; 
     mainPanel.add(textArea, c); 
     // mainPanel.add(controlPanel, c); 
     frame.add(mainPanel); 
+0

왜 가장자리에 나타나기를 기대합니까? –

+0

@ TomHawtin-tackline 그게 아니라 gridx = 0 및 gridy = 0 의미합니까? – gsingh2011

+1

아니, 그들은 단지 임의의 격자 번호입니다. GB의 경우 오른쪽에 약간의 무게가있는 스페이서 구성 요소를 추가하십시오. –

답변

2

잊지 마세요 무게 앵커 :

c.weightx = 1.0; 
    c.weighty = 1.0; 
    c.anchor = GridBagConstraints.NORTHWEST; 

편집 :
JTextArea에로 행과 열 값을 추가 예 :

controlPanel.add(new JButton("Play")); 
    controlPanel.add(new JButton("Pause")); 
    controlPanel.add(new JSpinner()); 

    JTextArea textArea = new JTextArea(20, 40); 

    c.gridx = 0; 
    c.gridy = 0; 
    c.gridheight = 3; 
    c.gridwidth = 3; 
    c.weightx = 1.0; 
    c.weighty = 1.0; 
    c.anchor = GridBagConstraints.NORTHWEST; 
    mainPanel.add(new JScrollPane(textArea), c); 
+0

controlPanel을 올바른 위치에 배치했지만 textArea가 표시되지 않습니다. 왜 그런가? – gsingh2011

+0

@gsingh : 아마 아주 작은 크기 일 것입니다. 행과 열을 허용하고 합리적인 수 (예 : 20 행 40 열)를 전달하는 Text 영역 생성자를 사용하는 것이 좋으며 JTextArea를 JScrollPane에 배치해야합니다. –

+0

@ gsingh2011 : 예를 들어 편집을 참조하십시오. –

1

내 완전히 심각한 대답은 GridBagLayout을 사용하지 않는 것입니다. GUI 양식 빌더의 경우 GridBagLayout을 그대로 두십시오.

손으로 GUI를 작성하려면 (일반적으로 손으로 빌드하고 양식 빌더를 피하는 것이 좋습니다.) 일반적으로 BoxLayouts를 사용하는 중첩 패널로 BorderLayout을 사용하는 것이 가장 좋습니다.

관련 문제