在连载一中,我简单的介绍了一下Java的基础知识,从这里起,我就开始讲图形用户界面(GUI)的Java程序,就像大家所熟悉的windows操作系统一样,比起控制台那个黑黑的窗口,实在要美观多啦!接下来,我们就要学习更多新知识了。
图形用户界面
相信大家对windows界面已经非常熟悉了吧!像菜单,按钮,文本框,组合框,列表框,单选和复选框等等,大家都已经非常熟悉了。那么从现在起就开始学习在Java中编出这些熟悉的界面元素吧!
首先,说一下Java中的一些名词解释:上面提到的界面元素,我们在Java中叫作组件(学VB或其他可视化编程的朋友习惯叫控件),而使用这些组件之前就需要用import关键字来导入相应的包(相关类的结合)。通常情况下,我们都是用AWT和Swing包。由于这两个包中的内容在很大一部分程度上是相似的,所以很多朋友不明白,为什么有了AWT还用Swing?难道Swing是多余的吗?其实很多朋友误解了,Swing包是对AWT的扩充,AWT包中的组件在不同的操作系统上所表示的形式并不一样,这就导致很多程序员为了编写一个跨平台的程序而对代码作许多相关测试,非常不方便!而Swing的出现就是为了解决这一问题,我学习和使用的就是Swing包中的组件。下面就给出Swing组件的类层次结构(组件名都冠以J开头):
JComponent
┏━━━━━┳━━━━━┳━━━━━╋━━━━━┳━━━━┳━━━━━┓
JButton JComboBox JLabel JToggleButton JList JMenuBar JMenuItem
┃ ┃
JRadioButton JCheckBoxMenuItem
┃ ┃
JCheckBox JRadioButtonMenuItem
下面我们建立一个简单的应用程序,用于接收客户数据的图形用户界面:
import javax.swing.*; //导入Swing包,否则无法使用下面组件
public class AcceptData
{
static JFrame fraObj; //定义窗口的框架
static JPanel panelObj; //定义面板,用于放置组件
//定义标签,用于提示客户输入信息
JLabel lblCustName;
JLabel lblCustCellNo;
JLabel lblCustCountry;
JLabel lblCustAge;
//定义文本编辑框,用于接收客户输入
JTextField txtCustName;
JTextField txtCustCellNo;
JTextField txtCustAge;
//定义组合框,提供可选择的选项
JComboBox cboCustCountry;
public AcceptData() //通过构造方法初始化组件
{
fraObj=new JFrame("客户数据处理窗口");
panelObj=new JPanel();
fraObj.getContentPane().add(panelObj); // 把面板加入到框架中
fraObj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口“关闭”按钮事件,否则无法正常退出程序
//初始化标签
lblCustName=new JLabel("客户名字: ");
lblCustCellNo=new JLabel("电话号码: ");
lblCustCountry=new JLabel("客户国籍: ");
lblCustAge=new JLabel("客户年龄: ");
//初始化编辑框
txtCustName=new JTextField(12);
txtCustCellNo=new JTextField(12);
txtCustAge=new JTextField(2);
//初始化组合框
String strCountry[]={"China","U.S.A."};
cboCustCountry=new JComboBox(strCountry);
//将组件直接添加到面板上
panelObj.add(lblCustName);
panelObj.add(txtCustName);
panelObj.add(lblCustCellNo);
panelObj.add(txtCustCellNo);
panelObj.add(lblCustCountry);
panelObj.add(cboCustCountry);
panelObj.add(lblCustAge);
panelObj.add(txtCustAge);
fraObj.setVisible(true); //设置窗口为可见的
fraObj.setSize(250,200); //设置窗口大小
}
public static void main(String args[])
{
AcceptData custObj=new AcceptData(); //定义对象,自动调用构造方法
}
}
至此,一个用于接收用户数据的窗口化程序已经编译完成!是不是觉得非常多?是不是觉得非常繁琐?没有关系,JAVA是有可视化编程工具的,就像VB一样,把要用的组件直接拖放过来就行了,像JBuilder就是这么做的!现在还是初学阶段,最好还是自己动手一步一步搞懂重要些!另外其他组件的使用方式大家可以好好研究一下!
接下来要讲的就是小应用程序。小应用程序是嵌入网页基于浏览器的运行方式,一般不使用构造方法(因为没有main()方法,所以构造方法没有意义),所以我们需要使用其他的初始化组件的机制了。
首先让我们了解小应用程序的生命周期:当程序被装入时就通过init()方法进行初始化,之后每当Applet聚焦(得到焦点时)时就运行start()方法,每当Applet释放焦点(失去焦点)时就运行stop()方法,最后当用户跳转到另一个页面或关闭浏览窗口时,就运行destroy()方法。
在了解小应用程序的生命周期后,我们就把上面的程序改一下,改成在在网页中显示出来:
import javax.swing.*; //导入Swing包,否则无法使用下面组件
public class AcceptData extends JApplet //通过关键字extends继承小应用程序类
{
static JPanel panelObj; //定义面板,用于放置组件
//定义标签,用于提示客户输入信息
JLabel lblCustName;
JLabel lblCustCellNo;
JLabel lblCustCountry;
JLabel lblCustAge;
//定义文本编辑框,用于接收客户输入
JTextField txtCustName;
JTextField txtCustCellNo;
JTextField txtCustAge;
//定义组合框,提供可选择的选项
JComboBox cboCustCountry;
public void init() //通过构造方法初始化组件
{
panelObj=new JPanel();
getContentPane().add(panelObj); // 把面板加入到框架中
//初始化标签
lblCustName=new JLabel("客户名字: ");
lblCustCellNo=new JLabel("电话号码: ");
lblCustCountry=new JLabel("客户国籍: ");
lblCustAge=new JLabel("客户年龄: ");
//初始化编辑框
txtCustName=new JTextField(12);
txtCustCellNo=new JTextField(12);
txtCustAge=new JTextField(2);
//初始化组合框
String strCountry[]={"China","U.S.A."};
cboCustCountry=new JComboBox(strCountry);
//将组件直接添加到面板上
panelObj.add(lblCustName);
panelObj.add(txtCustName);
panelObj.add(lblCustCellNo);
panelObj.add(txtCustCellNo);
panelObj.add(lblCustCountry);
panelObj.add(cboCustCountry);
panelObj.add(lblCustAge);
panelObj.add(txtCustAge);
}
}
OK修改完毕,接下来写一个HTML网页文件:
<html>