我试图在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,但我发现的任何文本都没有帮助或太复杂,无法理解。非常感谢!
答案 0 :(得分:0)
错误消息告诉您,如果要将组件添加到边框布局,则必须指定放置它的位置。您在向家中添加组件时已经完成了此操作,但在向panel1
和panel2
添加组件时却没有。您需要添加BorderLayout.EAST
(或WEST
或其他)来获取:
panel1.addComponent(BorderLayout.EAST, Next);
panel2.addComponent(BorderLayout.WEST, Back);
但是,我认为你错了。您可能不希望在panel1或panel2中使用边框布局 - 它们可以使用默认的流布局,因此如果删除panel1/2.setLayout()
行,则代码应该可以正常工作。
BTW:在java中,我们不在变量的开头使用大写字母,因此Next
和Back
应该是next
和back
。另外,panel1
应该是nextPanel
,panel2
应该是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);