无法在JFrame上显示所有按钮

时间:2016-09-10 15:52:43

标签: java swing layout-manager border-layout flowlayout

以下是我的代码。我无法添加所有6个按钮。一次只显示Button1-3或Button4-6。

请让我知道我哪里出错了。

// 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);
    }
}

1 个答案:

答案 0 :(得分:4)

您没有提到您所寻求的确切布局,并且有很多方法可以安排组件,但是要解决您的具体评论

  

我无法添加所有6个按钮。一次只显示Button1 - 3或Button4-6

  1. JFrame变为可见之前将所有元素添加到mainFrame.setVisible(true)(例如,在将组件添加到mainFrame后移动mainFrame.pack();。这样LayoutManager可以根据需要排列组件
  2. 在致电setVisible之前,请考虑致电LayoutManager(请参阅What does .pack() do?
  3. JFrame的内容窗格的默认BorderLayoutJPanelFlowLayout的默认值为mainFrame.add(mainPanel, BorderLayout.WEST); mainFrame.add(mainPanel, BorderLayout.EAST); mainFrame.pack();//call these methods after adding components mainFrame.setVisible(true); - 因此无需明确设置布局如此)...如果您希望添加两个面板以使它们排成一行,请考虑使用BorderLayout参数的适当组合。
  4. 例如:

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

    您也可以使用适当的BorderLayout参数将它们堆叠成两行。例如:

    object[1:]