关于java窗体类问题,我写了两个代码,想要的效果是一样的但一个得不到想要的,下面有显示异常,一个成功
import java.awt.* ;
public class DictionaryTry {
public static void main(String[] args){
Frame f = new Frame() ;
f.setTitle("英汉小词典");
f.setFont(new Font("宋体",Font.PLAIN,15));
f.setForeground(Color.blue) ;
f.setBackground(Color.lightGray) ;
Panel p = new Panel() ;
Label lb = new Label("输入单词:") ;
TextField tf = new TextField(20) ;
Button bt1 = new Button("查询") ;
Button bt2 = new Button("上一个单词") ;
Button bt3 = new Button("下一个单词") ;
p.add(lb) ;
p.add(tf) ;
p.add(bt1);
p.add(bt2) ;
p.add(bt3) ;
f.add(p,"North") ;
TextArea ta = new TextArea() ;
ta.setEnabled(false) ;
f.add(ta,"Center") ;
f.pack() ;
f.setVisible(true) ;
}
}
接下来的是失败的,请帮我看看出了什么问题
import java.awt.* ;
public class MyDictionary extends Frame {
Panel pl,pl2 ;
Label lb ;
TextField tf ;
TextArea ta ;
Button bt1,bt2,bt3 ;
MyDictionary(){
this.setVisible(true) ;
this.setTitle("英汉小词典") ;
this.setBackground(Color.lightGray) ;
this.setForeground(Color.red) ;
this.setFont(new Font("宋体",Font.PLAIN,15));
pl = new Panel() ;
lb = new Label("输入单词:") ;
tf = new TextField(20) ;
bt1 = new Button("查询") ;
bt2 = new Button("前一单词") ;
bt3 = new Button("后一单词") ;
pl.add(lb) ;
pl.add(tf) ;
pl.add(bt1) ;
pl.add(bt2) ;
pl.add(bt3) ;
this.add(pl,"North") ;
ta = new TextArea() ;
ta.setEnabled(true);
ta.setBackground(Color.white);
this.add(ta,"center") ;
pack();
}
}
public class DictionaryTest {
public static void main(String[] args){
MyDictionary md = new MyDictionary() ;
}
}
这个会显示这样Exception in thread "main" java.lang.IllegalArgumentException: cannot add to layout: unknown constraint: center
at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:463)
at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:424)
at java.awt.Container.addImpl(Container.java:1120)
at java.awt.Container.add(Container.java:966)
at MyDictionary.<init>(MyDictionary.java:38)
at DictionaryTest.main(DictionaryTest.java:6)
如果我加上一段流式布局的代码就不会有这个显示,但是得不到想要的效果,那个TextArea会显示不了,谢谢了帮我看看 展开
分析错误java.lang.IllegalArgumentException: 参数错误.
原因:单词大小写拼写错误.this.add(ta,"center") ; -->c要大写C
修改成为:this.add(ta,"Center") ;
或者直接写出this.add(ta);//如果组件位于中央,可以省略Center
边界布局BorderLayout,添加组件时,需要指定添加的位置,有下面五个位置
BorderLayout.CENTER-------->Center( 如果组件位于中间.可以省略"Center")
BorderLayout.NORTH-------->North
BorderLayout.SOUTH-------->South
BorderLayout.WEST---------->West
BorderLayout.EAST----------->East
系统为了方便我们记忆和便利,避免出现单词大小写错误啊,拼写错误等 , 定义了一些常量,方便我们使用.就是上面左边的方式,在eclipse工具中,自动补全,很快书写出正确的方位
this.add(组件,BorderLayout.NORTH);等同于this.add(组件,"North");
但习惯上,大家都写前面一种方式