2014-11-16 2 views
0
import java.awt.*; 
import javax.swing.*; 

import javax.swing.*; 

public class Cashmain extends JFrame{ 

    private GridBagConstraints gbc; 
    Header jpanel1 = new Header(); 
    Body jpanel2 = new Body(); 

    public Cashmain(){ 
     super("cashcashpinoy"); 
     Toolkit tk = Toolkit.getDefaultToolkit(); 
     int xSize = ((int) tk.getScreenSize().getWidth()); 
     int ySize = ((int) tk.getScreenSize().getHeight()); 
     setSize(xSize,ySize); 
     setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 


     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.anchor = GridBagConstraints.FIRST_LINE_START; 
     gbc.fill = GridBagConstraints.BOTH; 
     add(jpanel2, gbc); 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     add(jpanel1, gbc); 

패널이 제대로 표시되지 않습니다. 프레임은 중앙에 2 개의 작은 패널을 보여줍니다. 제발 도와주세요!JPanel이 GridBagLayout에서 제대로 표시되지 않습니다.

이 내 프로그램이 있어야 할 것입니다 같은 :

enter image description here

+1

단순히 'BorderLayout'을 사용하지 않는 이유는 무엇입니까? 그렇지 않으면 두 번째 구성 요소에'gbc.weighty = 1.0;'을 추가하면됩니다. –

+0

BorderLayout을 사용해 보았습니다. add (jpanel1, BorderLayout.NORTH); add (jpanel2, BorderLayout.SOUTH); 하지만 원하는대로 표시되지 않습니다. – PNC

+0

두 번째 구성 요소를 'CENTER' –

답변

3

단지 BorderLayout를 사용하는 것이 더 간단 할 것이지만, 그렇지 않으면 당신의 문제는 당신이 양의 값으로 weighty을 설정하지 않는다는 것입니다 귀하의 두 번째 구성 요소.

다음은 두 가지 옵션을 모두 보여주고 다른 곳으로 전환 할 수있는 작은 스 니펫입니다.

import java.awt.BorderLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

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

public class TestLayouts { 

    protected void initUI(final boolean useBorderLayout) { 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JButton header = new JButton("My Header (Click-me to switch layout current layout is " 
       + (useBorderLayout ? "BorderLayout" : "GridBagLayout")); 
     header.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       TestLayouts.this.initUI(!useBorderLayout); 
       frame.dispose(); 
      } 
     }); 
     JLabel someOtherComponent = new JLabel("Some other component"); 
     someOtherComponent.setHorizontalAlignment(JLabel.CENTER); 
     if (useBorderLayout) { 
      frame.getContentPane().setLayout(new BorderLayout()); 
      frame.getContentPane().add(header, BorderLayout.NORTH); 
      frame.getContentPane().add(someOtherComponent, BorderLayout.CENTER); 
     } else { 
      frame.getContentPane().setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.fill = GridBagConstraints.BOTH; 
      frame.getContentPane().add(header, gbc); 
      gbc.gridy = 1; 
      gbc.weighty = 1.0; 
      frame.getContentPane().add(someOtherComponent, gbc); 

     } 
     frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new TestLayouts().initUI(true); 
      } 
     }); 
    } 

} 
관련 문제