2016-09-10 80 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是一个不错的选择。但随着我的网页缩小,我不需要。除此之外,我已经实施了一切。你的解释很棒。非常感谢。 –