2012-11-08 7 views
1

나는 틈없이 구성 요소가 열에 하나 하나를 마련하고자, 다음과 같은 코드로 내 GUI 구성 요소를 배치 할 GridBagLayout을 사용하고 있습니다 Java GridBagLayout - 구성 요소를 간격없이 배치하는 방법은 무엇입니까?

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

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

public class TestGUI extends JFrame{ 

    public TestGUI(){ 

     JPanel bigPanel = new JPanel(new GridBagLayout()); 
     JPanel panel_a = new JPanel(); 
     JButton btnA = new JButton("button a"); 
     panel_a.add(btnA); 

     JPanel panel_b = new JPanel(); 
     JButton btnB = new JButton("button b"); 
     panel_b.add(btnB); 

     GridBagConstraints c = new GridBagConstraints(); 
     c.gridx = 0; 
     c.gridy = 0; 
     c.weighty = 1D; 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.anchor = GridBagConstraints.NORTH; 
     bigPanel.add(panel_a, c); 

     c.gridx = 0; 
     c.gridy = 1; 
     c.fill = GridBagConstraints.HORIZONTAL; 
     bigPanel.add(panel_b, c); 

     this.add(bigPanel); 
    } 

    public static void main(String[] args) { 

     TestGUI gui = new TestGUI(); 
     gui.setVisible(true); 
     gui.pack(); 
    } 
} 

이 나는 ​​패널에 하나씩 표시됩니다 바랍니다 란. 하지만 지금은 가지고이 : enter image description here

내가 bigPanel에 좀 더 많은 구성 요소를 추가하려고하고 레이아웃을 좀 더 사용자 정의를 요구, 그래서 대신 다른 레이아웃의 GridBagLayout에를 사용해야하고있다.

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+0

+1 더 나은 도움을 위해 [SSCCE] (http://sscce.org/), 짧은, 실행 가능한, 컴파일 가능한 JFrame, JPanels 및 GBC에 대해서만 – mKorbel

답변

1

사용 가능한 나머지 공간을 채우고 두 개의 단추 패널을 맨 위로 밀어 넣으려면 추가 구성 요소를 추가해야합니다. 더 많은 구성 요소를 추가 할 때 해당 구성 요소를 제거 할 수 있습니다.

(추가 구성 요소를 필요로하지 않고) 또 다른 옵션은 panel_banchor=NORTH에 대한 weighty=1.0을 설정했을 것이다, 그러나 당신은 당신이 더 많은 구성 요소를 추가 할 때 변경해야합니다.

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

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TestGUI extends JFrame { 

    public TestGUI() { 

     JPanel bigPanel = new JPanel(new GridBagLayout()); 
     JPanel panel_a = new JPanel(); 
     JButton btnA = new JButton("button a"); 
     panel_a.add(btnA); 

     JPanel panel_b = new JPanel(); 
     JButton btnB = new JButton("button b"); 
     panel_b.add(btnB); 

     GridBagConstraints c = new GridBagConstraints(); 
     c.gridwidth = GridBagConstraints.REMAINDER; 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.weightx = 1.0; 
     bigPanel.add(panel_a, c); 
     bigPanel.add(panel_b, c); 
     c.weighty = 1.0; 
     // Temporary panel to fill the rest of the bigPanel 
     bigPanel.add(new JPanel(), c); 
     this.add(bigPanel); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       TestGUI gui = new TestGUI(); 
       gui.pack(); 
       gui.setVisible(true); 
      } 
     }); 
    } 
} 
+0

이 빠른 수정 작업을 게시하십시오! 고맙습니다! – Biscuitz

관련 문제