2016-09-10 4 views
0

아래 코드는 제 코드입니다. 6 개의 버튼을 모두 추가 할 수 없습니다. 한 번에 Button1-3 또는 Button4-6 만 표시됩니다.JFrame의 모든 버튼을 표시 할 수 없습니다.

어디에서 잘못 될지 알려주세요.

// This class contains the main method and launches the Main screen 
import javax.swing.*; 
import java.awt.*; 

public class LearningHome{ 
    public static void main(String[] args){ 
     JFrame mainFrame = new JFrame("Welcome to the Learning! "); 

     try { 

     mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainFrame.setSize(800, 800); 
     mainFrame.setVisible(true); // Without this property the frame will not be visible 

     FlowLayout mainLayout = new FlowLayout(); 
     JPanel mainPanel = new JPanel(); 

     mainPanel.setLayout(mainLayout); 

     mainPanel.add(new JButton(" Button 1 ")); 
     mainPanel.add(new JButton(" Button 2 ")); 
     mainPanel.add(new JButton(" Button 3 ")); 

     JPanel subPanel = new JPanel(); 

     subPanel.setLayout(mainLayout); 

     subPanel.add(new JButton(" Button 4 ")); 
     subPanel.add(new JButton(" Button 5 ")); 
     subPanel.add(new JButton(" Button 6 ")); 

     mainFrame.add(mainPanel, mainLayout.LEFT); 
     mainFrame.setLocationRelativeTo(null); 
     mainFrame.add(subPanel, mainLayout.RIGHT); 
    } 
} 

답변

4

당신은 당신이 찾는 정확한 레이아웃을 언급하지 않았고, 배열 구성 요소에 대해 이동하는 방법의 다양한 수 있습니다 만, 특정 코멘트를 해결하기 위해

나는 모든 추가 할 수 없습니다입니다 6 개의 버튼. 만 Button1을 -.. 3 Button4-6가 표시되기 전에

  1. 당신이 mainFrame에 구성 요소를 추가 한 후 (예 : mainFrame.setVisible(true)를 이동 JFrame 모든 요소를 ​​추가 한 번에 표시지고이 방법 LayoutManager를 수행 할 수 있습니다
  2. 이전 setVisible를 호출하기 mainFrame.pack();를 호출 고려 필요에 따라 구성 요소를 배치 JFrame의 내용 창에 대한
  3. 기본 LayoutManager을 (What does .pack() do? 참조)를에 대한 BorderLayout (기본값입니다은 FlowLayout입니다. 따라서 Layout을 명시 적으로 설정할 필요가 없습니다 ... 두 패널을 추가하여 한 줄로 배치하려면 BorderLayout 매개 변수의 적절한 조합을 사용해보십시오. 예를 들어

:

mainFrame.add(mainPanel, BorderLayout.WEST); 
mainFrame.add(mainPanel, BorderLayout.EAST); 
mainFrame.pack();//call these methods after adding components 
mainFrame.setVisible(true); 

당신은 양자 택일 적절한의 BorderLayout 매개 변수를 사용하여 두 개의 라인으로 그들을 적재 할 수 있습니다. 예 :

mainFrame.add(mainPanel, BorderLayout.CENTER); 
mainFrame.add(mainPanel, BorderLayout.SOUTH); 
+0

팩이 좋은 옵션입니다. 하지만 그걸로 내 페이지가 줄어들고 있는데, 나는 그럴 필요가 없다. 그 외에는 모든 것을 구현했습니다. 당신의 설명은 굉장했습니다. 정말 고맙습니다. –