2014-04-06 1 views
0

이 코드를 GridBagLayout에 대해 테스트 한 결과이 코드에는 오류가 있지만 다른 코드에는 왜 오류가 있는지 궁금합니다. 이 코드는 예외 IllegalArgumentException: cannot add to layout: constraint must be a string (or null) 가지고 :Java - GridBagLayout과의 두 코드 비교 - IllegalArgumentException

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

public class Layout extends JFrame 
{ 
    gridbag g=new gridbag(); 

    public Layout() 
    { 
     add(g, BorderLayout.CENTER); 
    } 

    public static void main(String[]args) 
    { 
     Layout lay=new Layout(); 
     lay.setSize(500, 500); 
     lay.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     lay.setLocationRelativeTo(null); 
     lay.setVisible(true); 
    } 

    class gridbag extends JPanel 
    { 
     private JLabel label=new JLabel("Test"); 

     public gridbag() 
     { 
      setLayout(new GridBagLayout()); 

      GridBagConstraints gbc=new GridBagConstraints();    
      Container container=getContentPane();   
      addC(label, container, gbc, 0, 0, 1, 4, 0, 0);   
     } 

     private void addC(Component c, Container container, GridBagConstraints gbc, int C, int R, int nC, int nR, double wX, double wY) 
     { 
      gbc.gridx=C; 
      gbc.gridy=R; 
      gbc.gridwidth=nC; 
      gbc.gridheight=nR; 
      gbc.weightx=wX; 
      gbc.weighty=wY; 

      container.add(c, gbc); 
     } 
    } 
} 

을하지만이 코드는 일 : 차이의

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

class gridbag extends JPanel 
{ 
    private JLabel label=new JLabel("Test"); 

    public gridbag() 
    { 
     setLayout(new GridBagLayout()); 

     GridBagConstraints gbc=new GridBagConstraints();    
     Container container=this; 
     addC(label, container, gbc, 0, 0, 1, 4, 0, 0);   
    } 

    private void addC(Component c, Container container, GridBagConstraints gbc, int C, int R, int nC, int nR, double wX, double wY) 
    { 
     gbc.gridx=C; 
     gbc.gridy=R; 
     gbc.gridwidth=nC; 
     gbc.gridheight=nR; 
     gbc.weightx=wX; 
     gbc.weighty=wY; 

     container.add(c, gbc); 
    } 

    public static void main(String[]args) 
    { 
     gridbag g=new gridbag(); 
     JFrame frm=new JFrame(); 
     frm.setSize(500, 500); 
     frm.add(g, BorderLayout.CENTER); 
     frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frm.setLocationRelativeTo(null); 
     frm.setVisible(true); 
    } 
} 

하나는 JFrame에 대한 새로운 Layout 클래스와 직접 두 번째 코드 사용 JFrame 거기에있다.

답변

1

문제는 여기에 있으며 이는 두 버전의 차이점 중 하나입니다.

Container container=getContentPane(); 

시도

Container container=this;