向 BorderLayout 添加组件

Adding components to BorderLayout

我正在尝试在 IntelliJ 中实现 BorderLayout,但无法正常工作。它编译得很好,但是当它运行时,我看到查看器一秒钟,然后它崩溃了。我目前拥有的代码是

    Button Next=new Button("Next");
    Button Back=new Button("Back");
    Container panel1=new Container();
    Container panel2=new Container();
    home = new Form("Home");
    home.setLayout(new BorderLayout());
    panel1.setLayout(new BorderLayout());
    panel2.setLayout(new BorderLayout());
    home.addComponent(BorderLayout.EAST,panel1);
    home.addComponent(BorderLayout.WEST,panel2);
    panel1.addComponent(Next);
    panel2.addComponent(Back); 

我在崩溃后得到的错误是"Cannot add component to BorderLayout Container without constraint parameter"。我尝试研究约束参数并在 IntelliJ 中使用 BorderLayout,但我发现的任何文本要么没有帮助,要么太复杂而难以理解。非常感谢!

错误消息告诉您,如果要将组件添加到边框布局,您必须指定放置它的位置。在将组件添加到 home 时,您已经这样做了,但是在将组件添加到 panel1panel2 时,您还没有这样做。您需要添加 BorderLayout.EAST(或 WEST 或其他)以获取:

panel1.addComponent(BorderLayout.EAST, Next);
panel2.addComponent(BorderLayout.WEST, Back); 

但是,我认为你用错了。您可能不希望在 panel1 或 panel2 中使用边框布局——它们在默认流布局中没有问题,因此如果您删除 panel1/2.setLayout() 行,您的代码应该可以正常工作。

顺便说一句:在java中我们不在变量的开头使用大写字母,所以NextBack应该是nextback.另外,panel1 应该类似于 nextPanel,而 panel2 应该类似于 backPanel

再补充一件事 -- 没有人再使用 awt。我们都在继续前进(主要是 html5)。所以,在 swing 中尝试这个,你会得到:

import javax.swing.*;
...
JButton next = new JButton("Next");
JButton back = new JButton("Back");
JFrame home = new JFrame("Home");
home.setLayout(new BorderLayout());
home.add(back, BorderLayout.WEST);
home.add(next, BorderLayout.EAST);