无法在 JFrame 上显示所有按钮
Not able to display all Buttons on JFrame
下面是我的代码。我无法添加所有 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);
}
}
您没有提到您寻求的确切布局,并且有很多方法可以安排组件,但要解决您的具体评论
I am not able to add all the 6 buttons. Only Button1 - 3 or Button4-6 are getting displayed at a time
- 在
JFrame
可见之前将所有元素添加到 JFrame
(例如,在将组件添加到 mainFrame
之后移动 mainFrame.setVisible(true)
。这样 LayoutManager 可以根据需要排列组件
- 考虑在调用
setVisible
之前调用 mainFrame.pack();
(参见 What does .pack() do?)
JFrame
的内容窗格的默认 LayoutManager
是 BorderLayout
(JPanel
的默认是 FlowLayout
- 所以不需要明确如此设置布局)...如果您希望添加两个面板以使它们排成一行,请考虑使用 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);
下面是我的代码。我无法添加所有 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);
}
}
您没有提到您寻求的确切布局,并且有很多方法可以安排组件,但要解决您的具体评论
I am not able to add all the 6 buttons. Only Button1 - 3 or Button4-6 are getting displayed at a time
- 在
JFrame
可见之前将所有元素添加到JFrame
(例如,在将组件添加到mainFrame
之后移动mainFrame.setVisible(true)
。这样 LayoutManager 可以根据需要排列组件 - 考虑在调用
setVisible
之前调用mainFrame.pack();
(参见 What does .pack() do?) JFrame
的内容窗格的默认LayoutManager
是BorderLayout
(JPanel
的默认是FlowLayout
- 所以不需要明确如此设置布局)...如果您希望添加两个面板以使它们排成一行,请考虑使用 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);