利用Java的类库可以制作基于窗体界面的程序,这种程序可以分为两种,一个是基于awt包的传统窗体程序,另一个是基于swing包的新型窗体程序。
1、基于awt包的传统窗体程序
awt(抽象窗体工具箱)包中的程序主要是基于windows平台的显示风格,是种早期的Java窗体形式。
1、1 窗体的建立
先看一个最为简单的窗体例子,如:
import java.awt.*;
public class exec
{
public static void main(String args[])
{
Frame f=new Frame("This is a window!");
f.setLocation(100,200);
f.setSize(200,400);
f.setBackground(Color.red);
f.setVisible(true);
}
}
说明:
1)任何基于awt包的传统窗体程序都必须导入相应的awt包以方便编程。
2)对于默认的新建窗体,左上角总是对齐屏幕的左上角,大小只能显示出标题栏,所以,必须设置常见的用于显示的属性。
3)对于默认的新建窗体,并不直接显示,要想使窗体显示出来,必须设置visible属性为真。
4)构造函数中的参数可以用于设置窗体的标题,也可以使用setTitle()方法后期设置。
1、2 组件的添加
各种常见的awt组件,如按钮,文本框都可以直接加入窗体中,如添加了一个按钮的窗体程序:
import java.awt.*;
public class exec
{
public static void main(String args[])
{
Frame f=new Frame("This is a window!");
f.setLocation(100,200);
f.setSize(200,400);
f.setBackground(Color.red);
Button b1=new Button("Ok!");
f.add(b1);
f.setVisible(true);
}
}
程序的显示模样是在窗体上显示一个和窗体一样大的按钮!
再如添加了两个按钮的窗体程序:
import java.awt.*;
public class exec
{
public static void main(String args[])
{
Frame f=new Frame("This is a window!");
f.setLocation(100,200);
f.setSize(200,400);
f.setBackground(Color.red);
Button b1=new Button("Ok!");
f.add(b1);
Button b2=new Button("Bye!");
f.add(b2);
f.setVisible(true);
}
}
程序的显示模样仍然是在窗体上显示一个和窗体一样大的按钮,但是只显示第二个按钮!
这是为什么呢?
主要的原因在于Java窗体的组件布局并非主要依*直接设置组件的所在屏幕座标位置来进行的,相反,由于Java语言程序可以运行在很多其他不同硬件的显示平台上,所以明确的设定屏幕座标位置会因为具体硬件环境的变化而产生不同的效果,如有些设备规定屏幕的右下角为屏幕座标的零点,显然此时基于左上角为屏幕座标零点对齐的组件就会显示出另外一幅模样。
在Java窗体程序中,可以使用布局管理器类来专门维护屏幕上组件的布局,如流布局管理器等。这些布局管理器类可以有效的将用户需要表达的组件布局关系按照特定操作系统的特点显示出来。如:
import java.awt.*;
public class exec
{
public static void main(String args[])
{
Frame f=new Frame("This is a window!");
f.setLocation(100,200);
f.setSize(200,400);
f.setBackground(Color.red);
FlowLayout fl=new FlowLayout();
f.setLayout(fl);
Button b1=new Button("Ok!");
f.add(b1);
Button b2=new Button("Bye!");
f.add(b2);
f.setVisible(true);
}
}
说明:流布局管理器类可以按照从左到右、从上到下的顺序依次摆放组件。
1、3 使用对象数组的窗体程序
设想在窗体上显示十个按钮,它们的标签分别为0、1、...、9。如果直接采用刚才的做法,代码势必非常罗嗦。使用对象数组可以有效的改善这一情况,如:
import java.awt.*;
public class exec
{
public static void main(String args[])
{
Frame f=new Frame("This is a window!");
f.setLocation(100,200);
f.setSize(200,400);
f.setBackground(Color.red);
FlowLayout fl=new FlowLayout();
f.setLayout(fl);
Button[] barray=new Button[10];
for(int i=0;i<barray.length;i++)
{
barray=new Button();
barray.setLabel(String.valueOf(i));
f.add(barray);
}
f.setVisible(true);
}
}
注意:下面的语句是非常关键的,如果疏忽,会产生运行时异常java.lang.NullPointerException:
barray=new Button();
1、4 使用继承实现的自定义窗体
设想在应用程序中使用的全部窗体都是具有相同的标题和背景色,如果采用分别设置不同窗体属性的做法,代码势必非常罗嗦,且难以有效管理和维护。使用继承的方式,通过父类窗体的属性成员得到新的子类窗体,将是一个相当有效的解决方案,如:
import java.awt.*;
public class exec
{
public static void main(String args[])
{
MyFrame m=new MyFrame("This is a window!");
m.setLocation(100,200);
m.setSize(200,400);
m.setVisible(true);
}
}
class MyFrame extends Frame
{
public MyFrame(String str)
{
super(str);
setBackground(Color.red);
}
}
[此贴子已经被作者于2010-12-12 07:56:16编辑过]