向BorderLayout添加组件

时间:2017-03-15 02:16:45

标签: border-layout

我试图在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); 

崩溃后得到的错误是"无法在没有约束参数的情况下将组件添加到BorderLayout容器"。我尝试研究一个约束参数,并在IntelliJ中使用BorderLayout,但我发现的任何文本都没有帮助或太复杂,无法理解。非常感谢!

1 个答案:

答案 0 :(得分:0)

错误消息告诉您,如果要将组件添加到边框布局,则必须指定放置它的位置。您在向家中添加组件时已经完成了此操作,但在向panel1panel2添加组件时却没有。您需要添加BorderLayout.EAST(或WEST或其他)来获取:

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

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

BTW:在java中,我们不在变量的开头使用大写字母,因此NextBack应该是nextback。另外,panel1应该是nextPanelpanel2应该是backPanel

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

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