2017-01-28 4 views
-2
  1. 이 레이아웃에 문제가 있습니다. 세 번째 단추의 크기를 2x2로 만들려면 ?GridBagLayout 구성 요소 배치

  2. 두 번째 버튼을 두 열로 늘리려면 어디에서 시작하고 어디서 멈출 지 어떻게 말합니까? 열 1과 2가 열 2와 열 3을 덮고있는 경우의 열을 구분하는 방법을 구별하는 방법은 무엇입니까? 모든

    public class SwingExample { 
        public static void main(String[] args) { 
        JFrame theFrame = new JFrame("Grid Bag Example"); 
        theFrame.setSize(600,400); 
        theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    
        JPanel thePanel = new JPanel(); 
        theFrame.add(thePanel); 
    
        JButton button1 = new JButton("1"); 
        JButton button2 = new JButton("2"); 
        JButton button3 = new JButton("3"); 
    
        GridBagLayout gbl = new GridBagLayout();            
        thePanel.setLayout(gbl); 
        GridBagConstraints gbc = new GridBagConstraints(); 
        gbc.insets = new Insets(10, 10, 10, 10); 
    
        gbc.gridx = 0; 
        gbc.gridy = 0;     
        thePanel.add(button1,gbc); 
    
        gbc.gridx = 1; 
        gbc.gridy = 1;  
        thePanel.add(button2,gbc); 
    
        gbc.gridwidth = 2; 
        gbc.gridheight = 2; 
        gbc.fill = GridBagConstraints.HORIZONTAL; 
        gbc.fill = GridBagConstraints.VERTICAL; 
        gbc.gridx = 3; 
        gbc.gridy = 3; 
        thePanel.add(button3,gbc); 
    
        theFrame.setVisible(true); 
        } 
    } 
    
+0

gridwidth는 해당 열의 다른 구성 요소를 기준으로합니다. 당신은 단지 3 개의 칼럼 만 가지고 있습니다. 세 번째 열의 유일한 단추이기 때문에 세 번째 단추의 폭을 2로 만들 수 없습니다. 세 번째 버튼을 0 열에 배치하면 첫 번째 두 열의 버튼 너비를 차지할 수 있기 때문에 너비를 2로 지정할 수 있습니다. – camickr

+0

그 문장에 대해 자세히 설명해 주시겠습니까? _gridwidth는 해당 열의 다른 구성 요소와 관련이 있습니다 _. 나는 그것을 이해하지 못한다. [Oracle] (https://docs.oracle.com/javase/8/docs/api/java/awt/GridBagConstraints.html#gridwidth) 명확하게 말합니다. _ 행의 구성 요소 표시 영역에 대한 셀 수를 지정합니다 ._ 아주 평범하고 똑바로 보인다. – user7381956

+0

4 열에 구성 요소가 없으므로 3 열의 구성 요소가 3 열 및 4 열로 확장 될 수 있다고 말할 수 없습니다. 구성 요소가 여러 열을 확장하는 방법에 대한 예를 들었습니다. 자세한 정보 및 작업 예제는 [GridBagLayout 사용 방법 (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html)의 스윙 튜토리얼을 참조하십시오. – camickr

답변

0

먼저 당신은 튜토리얼의 데모 코드를 실행 않았다 ???

더 나은 이해를 위해 자습서 코드를 설명하려고합니다. 두 번째 행에있는 버튼이 세 번째 행의 3 열

  • 버튼 걸쳐

    1. 번째 열에서 시작하여 열 걸쳐 2 : 그것은되도록 gridwidth 제약 사용하는 방법을 보여준다.

    GridBagLayout은 먼저 구성 요소가 들어있는 각 열의 너비를 결정해야합니다. 따라서 각 열에 대해 가장 큰 구성 요소가 발견됩니다.

    각 열의 가장 큰 구성 요소의 크기를 알았으므로 열 너비를 합하여 행 2와 3의 단추 크기를 결정할 수 있습니다. 2 행의 버튼은 3 열 모두의 너비를 추가합니다. 3 열의 버튼은 마지막 두 열의 너비 만 추가합니다.

    그리고 도대체 열 4의 구성 요소는 여러 열을 걸쳐 구성 요소를 원하는 경우 구성 요소 3

    의 행동과 스패닝과 함께해야 할 것입니다 후 다른 행에서 구성 요소가 있어야합니다 그 열의 너비를 결정할 수 있습니다. gridwidth = 2을 사용한다고해서 버튼의 크기가 자동으로 두 배가된다는 의미는 아닙니다.

    gbc.gridx = 3; 열 2의 폭이 0

    수 있도록

    그냥 버튼 3을 가질 수 없습니다보다도 마술 트릭들과 함께 거기에 2 열에서 어떤 구성 요소가 없습니다 열 3에 표시 그 넓이/높이 열/행 크기는 제로가 될 것이다 수단 제로 것이기 때문에 더미 보이지 제로 차원 성분

    음는 제로 차원의 요소를 사용할 수 없다. 따라서 크기가있는 더미 구성 요소를 추가 할 수 있습니다. 하여 패널 중 라벨의 추가 및 열/행에 대한 개별 셀을 차지 어떤 구성 요소가 없기 때문에 작동이 중지 볼 밖으로 위의 코드 주석에서

    import java.awt.*; 
    import javax.swing.*; 
    
    public class SwingExample { 
        public static void main(String[] args) { 
        JFrame theFrame = new JFrame("Grid Bag Example"); 
        theFrame.setSize(600,400); 
        theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    
        JPanel thePanel = new JPanel(); 
        theFrame.add(thePanel); 
    
        JButton button1 = new JButton("1"); 
        JButton button2 = new JButton("2"); 
        JButton button3 = new JButton("3"); 
    
        JLabel label1 = new JLabel(); 
        label1.setPreferredSize(button1.getPreferredSize()); 
        JLabel label2 = new JLabel(); 
        label2.setPreferredSize(button1.getPreferredSize()); 
    
        GridBagLayout gbl = new GridBagLayout(); 
        thePanel.setLayout(gbl); 
        GridBagConstraints gbc = new GridBagConstraints(); 
        gbc.insets = new Insets(10, 10, 10, 10); 
        gbc.fill = GridBagConstraints.BOTH; 
    
        gbc.gridx = 0; 
        gbc.gridy = 0; 
        thePanel.add(button1,gbc); 
    
        gbc.gridx = 1; 
        gbc.gridy = 1; 
        thePanel.add(button2,gbc); 
    
        gbc.gridx = 2; 
        gbc.gridy = 2; 
        thePanel.add(label1,gbc); // dummy component 
    
        gbc.gridx = 3; 
        gbc.gridy = 3; 
        thePanel.add(label2,gbc); // dummy component 
    
        gbc.gridx = 2; 
        gbc.gridy = 2; 
        gbc.gridwidth = 2; 
        gbc.gridheight = 2; 
        thePanel.add(button3,gbc); 
    
        theFrame.setVisible(true); 
        } 
    } 
    

    예를 들면 다음과 같습니다. 그게 gridwidth가 열의 다른 구성 요소와 관련이 있다고 설명했을 때 설명하려고했던 것입니다.

  • +0

    여기에는 실제 그리드가 없습니다. 그리드를 만들지 않고 구성 요소를 던지지 않습니까? 추가 된 구성 요소 만 있습니다. 그런 다음 그리드를 형성하고 상상의 그리드를 통해 조작하려고합니다. – user7381956

    +0

    그리드에 구성 요소를 추가하여 그리드를 원하는만큼 크게 만듭니다. 그리드의 셀에 구성 요소를 추가하지 않으면 해당 셀의 크기는 (0, 0)입니다. 나는 그것을 더 잘 설명하는 법을 모른다. 이해할 수있는 유일한 방법은 튜토리얼 링크와 위의 코드에서 제시 한 작업 예제를 활용하는 것입니다. – camickr

    +0

    확인을 시도합니다. 감사. – user7381956

    관련 문제