如何使用BorderLayout创建帧并为每个空间分配一个组件?

发布于 2025-01-29 07:39:17 字数 1574 浏览 3 评论 0原文

当我键入.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);
        
    }
    
    
}

When I type .setLayout(new BorderLayout());
It appears me this: The method setLayout(LayoutManager) in the type JFrame is not applicable for the arguments (BorderLayout)

I´m a beginner and I was following a video but this does not work and I already watched different videos, thank you so much for your help.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雪若未夕 2025-02-05 07:39:17

frame.setvisible(true);移动到方法的末尾。摇摆布局很懒惰,它们不会“神奇地”自己更新,而是需要告诉它,您需要在要更新容器时,使用Revalidaterepaint repaint 为了安排新的布局和通行证,但是,正如我所说,在您的情况下,最简单的事情就是在使其可见之前设置窗口。

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

Move frame.setVisible(true); to the end of your method. Swing layouts are lazy, they won't "magically" update by themselves, instead, you need to tell it when you want a container to be updated, using revalidate and repaint to schedule a new layout and pass pass, but, as I've said, the easiest thing to do in your case, is simply setup the window before you make it visible.

enter image description here

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);
            }
        });
    }
}
自由范儿 2025-02-05 07:39:17

这是因为您的类的名称与borderlayout布局相同。更改班级的名称,应该很好地工作。切勿在命名对象/类/方法等中使用关键字或类似的东西。

That's because the name of your class is the same as BorderLayout layout. Change name of your class and it should work perfectly fine. Never use a keyword or something like that in naming an object/class/method etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文