如何使用 BorderLayout 创建框架并为每个 space 分配一个组件?

How can I create a frame with a BorderLayout and assign each space a component?

当我输入 .setLayout(new BorderLayout()); 在我看来是这样的:JFrame 类型中的方法 setLayout(LayoutManager) 不适用于参数 (BorderLayout)

我是初学者,我正在关注一个视频,但这不起作用,我已经观看了不同的视频,非常感谢您的帮助。

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class BorderLayout {

    public static void main(String []args) {
        
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setLayout(new BorderLayout());
        frame.setVisible(true);
        
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        JPanel panel3 = new JPanel();
        JPanel panel4 = new JPanel();
        JPanel panel5 = new JPanel();
        
        panel1.setBackground(Color.red);
        panel2.setBackground(Color.green);
        panel3.setBackground(Color.yellow);
        panel4.setBackground(Color.magenta);
        panel5.setBackground(Color.blue);
        
        panel1.setPreferredSize(new Dimension(100, 100));
        panel2.setPreferredSize(new Dimension(100, 100));
        panel3.setPreferredSize(new Dimension(100, 100));
        panel4.setPreferredSize(new Dimension(100, 100));
        panel5.setPreferredSize(new Dimension(100, 100));
        
        frame.add(panel1, BorderLayout.NORTH);
        frame.add(panel2, BorderLayout.WEST);
        frame.add(panel3, BorderLayout.EAST);
        frame.add(panel4, BorderLayout.SOUTH);
        frame.add(panel5, BorderLayout.CENTER);
        
    }
    
    
}

frame.setVisible(true); 移动到方法的末尾。 Swing 布局是惰性的,它们不会自己“神奇地”更新,相反,您需要告诉它何时更新容器,使用 revalidaterepaint 来安排新布局和pass pass,但是,正如我所说,在你的情况下最简单的事情就是在你让它可见之前简单地设置 window。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.EventQueue;

public class Main {

    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());

                JPanel panel1 = new JPanel();
                JPanel panel2 = new JPanel();
                JPanel panel3 = new JPanel();
                JPanel panel4 = new JPanel();
                JPanel panel5 = new JPanel();

                panel1.setBackground(Color.red);
                panel2.setBackground(Color.green);
                panel3.setBackground(Color.yellow);
                panel4.setBackground(Color.magenta);
                panel5.setBackground(Color.blue);

                panel1.setPreferredSize(new Dimension(100, 100));
                panel2.setPreferredSize(new Dimension(100, 100));
                panel3.setPreferredSize(new Dimension(100, 100));
                panel4.setPreferredSize(new Dimension(100, 100));
                panel5.setPreferredSize(new Dimension(100, 100));

                frame.add(panel1, BorderLayout.NORTH);
                frame.add(panel2, BorderLayout.WEST);
                frame.add(panel3, BorderLayout.EAST);
                frame.add(panel4, BorderLayout.SOUTH);
                frame.add(panel5, BorderLayout.CENTER);

                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}

那是因为您的 class 名称与 BorderLayout 布局相同。更改 class 的名称,它应该可以正常工作。切勿在命名 object/class/method 等

时使用关键字或类似的东西