2016-09-10 54 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. 添加到JFrame所有元素變得可見之前(如移動mainFrame.setVisible(true)組件添加到mainFrame後,這樣的佈局管理能根據需要
  2. 考慮調用mainFrame.pack();主叫setVisible之前安排的組件(參見What does .pack() do?
  3. 默認LayoutManager用於JFrame的內容窗格是BorderLayout(默認爲JPanelFlowLayout - 因此不需要明確設置佈局)如果您希望添加兩個面板以便它們排成一行,請考慮使用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

PACK是一個不錯的選擇。但隨着我的網頁縮小,我不需要。除此之外,我已經實施了一切。你的解釋很棒。非常感謝。 –