2012-09-12 3 views
1

저는 현재 JButton의 배열을 가지고 있습니다. 두 JPanel에 고르게 배치하려고합니다. 따라서 배열에 8 개의 버튼이 있다면 왼쪽 열에는 4 개의 버튼이 있고 오른쪽 열에는 4 개의 버튼이 있습니다. 그러나 배열에 버튼이 7 개있는 경우 왼쪽 열에는 4 개의 버튼이 있고 오른쪽 열에는 3 개의 버튼이 있습니다.두 열 사이에서 동적으로 나누어 진 구성 요소를 추가하는 방법은 무엇입니까?

나는 그런 시나리오에 대한 기본적인 논리를 만들고, 내가 만든 코드에 논리 오류가 있는지 (아니면 이것을 더 잘 수행 할 수있는 방법이 있는지)보고 싶었다. 여기

코드 나는 샘플 코드가 잘 작동하는 것 같다

public class SwingTest { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 

     JButton b1 = new JButton(); 
     b1.setText("Button1"); 

     JButton b2 = new JButton(); 
     b2.setText("Button2"); 

     JButton b3 = new JButton(); 
     b3.setText("Button3"); 

     JButton b4 = new JButton(); 
     b4.setText("Button4"); 

     JButton b5 = new JButton(); 
     b5.setText("Button5"); 

     JButton b6 = new JButton(); 
     b6.setText("Button6"); 

     ArrayList<JButton> jButtonList = new ArrayList(); 
     jButtonList.add(b1); 
     jButtonList.add(b2); 
     jButtonList.add(b3); 
     jButtonList.add(b4); 
     jButtonList.add(b5); 
     jButtonList.add(b6); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new java.awt.GridBagLayout()); 

     double halfList = Math.ceil((jButtonList.size()/2.0)); 
     int gridX = 0, gridY = 0; 

     for(int i = 0; i < jButtonList.size(); i++) { 
      GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints(); 

      if(gridY == (int)halfList) { 
       gridX++; 
       gridY = 0; 
      } 
      gridBagConstraints.gridx = gridX; 
      gridBagConstraints.gridy = gridY; 
      gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
      gridBagConstraints.weightx = 1.0; 
      gridBagConstraints.weighty = 1.0; 
      gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); 
      panel.add(jButtonList.get(i), gridBagConstraints); 
      gridY++; 
     } 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

을 마련했습니다,하지만 지금은 딸꾹질 수있는 경우가 될 것인가?

답변

4

당신은 GridLayout과 2 열이 생성자에서 0 선을 통과와 JPanel을 사용할 수 있습니다 :

JPanel panel = new JPanel(new GridLayout(0 ,2)); 

그것은 당신이 그것을에 구성 요소를 추가 할 때 항상 2 열

을 유지하면서 패널, 높이가 증가된다는 것을 의미합니다

이 같이 간단 할 것 JButton의를 추가하는 코드 :

for(int i = 0; i < jButtonList.size(); i++) { 
    panel.add(jButtonList.get(i)); 
} 
+0

나는 현재 코드보다 덜 장황하다. - 테스트되었습니다! 그 코드는 실제로 훌륭한 일을했습니다. 정보 주셔서 감사합니다. 이 질문을 최고의 대답으로 표시하기 전에 내가 지금 거기에있는 논리에 문제가 있습니까? – WilliamShatner

+0

내가 이것에 대해 확신 할 수없는 한가지는 행 대신 열로 단추를 추가하는 것입니다 (행이나 열로 추가 할 것인지 결정하지 않은 경우) – WilliamShatner

+0

논리를 사용하면 FOR setLayout to panel.setLayout (새로운 GridLayout (0, 2)는 작동해야 함) – Roger

1

이것에 대한 GridBagLayout 사용은 좋은 계획이 될 것으로 보인다.

그러나 버튼 구성 코드를 약간 정리해야합니다. 100 개의 버튼이 필요한 경우 어떻게됩니까? 수동으로 100 개의 버튼을 추가하는 것은 좋은 생각이 아닙니다. 나는 버튼을 만들고 리턴하는 매개 변수화 된 메소드와 ArrayList에 버튼을 추가하는 루프를 가지고있다.

+0

위의 코드는 단지 SSCCE이므로 다른 사람들이 빠르게 코드를 작성하고 위의 논리가없는 경우를 발견 할 수 있습니다. 't 작업. 내 논리가 열을 올바르게 분할하는 것이 올바른지 궁금하다. – WilliamShatner