首先,我们先来介绍一下组件。
1.AWT组件(java.awt包下)
AWT组件是属于重量级组件(重量级组件表示组件的实现是依赖于操作系统的绘图机制实现的)。
无法实现Java的跨平台性
2.SWING组件(在javax.swing包下)
SWING组件是基于AWT组件采用纯Java语言实现的轻量级组件。
注:顶级容器是重量级组件。
然后是常用的一些组件类,我们以SWING为例,AWT的类名在SWING的基础上去掉一个J。
1.容器组件类:能添加容器组件或者元素组件类。
JFrame 窗体容器组件类 顶级容器
JPanel 面板容器组件类 最灵活的容器
2.元素组件类:一般是用来显示文字、图片或者接受输入的组件类
JLabel 标签元素组件类 显示文字或者图片
JTextField 文本输入框元素组件类 接收输入,直接显示
JPasswordField 密码输入框元素组件类 接收输入,以某个符号代替显示
JComboBox 下拉列表框元素组件类 提供一系列的选项让用户选择,默认不允许编辑
JCheckBox 复选框元素组件类 提供一个选择框,还能显示文字或者图片
JButton 按钮元素组件类 显示文字或者图片,还能有点击效果
注:我们可以把元素组件或面板容器添加到JFrame窗体容器中,但是反过来是不可以的,因为只有JFrame才是顶级容器。
注:以上的容器组件和元素组件在使用的时候要在前面加上包名。其他的类也是如此。例如:java.swing.JFrame
如果觉得这样写代码看起来太繁琐的话,我们也可以在代码的最前面导入包,也可是使用ctrl+shift+O自动导入包
3.辅助类:帮助组件完成某一个功能的类。
java.awt.FlowLayout 流式布局类 类似于word档
java.awt.BorderLayout 边框布局类 将容器分为上北下南左西右东中间五部分
注:
流式布局是不具备换行功能的,只有当当前行的空间使用完之后才会自动的换行,但是我们要通过调整元素组件的大小来达到我们想要的效果。
边框布局中的五部分当有些部分不需要时,可以不使用,它会自动地与我们需要的部分进行合并从而达到我们想要的布局效果。
根据实际情况恰当的选择不同的布局方式。
下面是一些我们在实现一个登录界面时需要注意的:
1.一些常用函数:
setSize(430, 370) 设置大小,左面是长度右面是宽度(高度) 仅限于顶级容器
setPreferredSize(Dimension dim) 除顶级容器以外,设置大小都采用这种方式,Dimension使用new来实例化
例如:JLabel labImage = new JLabel(image);
Dimension dim = new Dimension(430,150);
labImage.setPreferredSize(dim);
setLocationRelativeTo(null) 设置窗体显示的相对位置,这里null表示窗体相对于屏幕的中央位置
setDefaultCloseOperation(3) 设置窗体关闭操作,这里3表示关闭窗体退出程序
2.关于显示
我们的元素组件或者面板容器不是写好了就能显示出来的,一定要记得把他们添加到容器中,这里我们使用add()函数,括号里面的是要添加到容器中的内容。
刚开始接触界面开发时可能会出现写了很多东西,也没有报错,为什么运行出来什么都没有呢?
造成这种情况的原因可能是我们没有把窗体设置为可见,这里我们又要用到一个函数setVisible(true)
注:注意setVisible()函数的摆放位置,因为他决定了要显示的内容的多少,该函数以上的内容都是可见的,写在该函数后面的就不可见了。
有了以上的基础我们就可以实现下面这样一个界面了。
但是,该界面只具有点击和输入的效果,点击登录并不会有什么反应。
如果想要在点击之后让程序做出其他的响应,这就要用到事件监听机制了。
首先,我们要清楚什么是事件源对象。
任何的容器组件、元素组件都可以作为事件源对象。当我们要去确定一个事件源对象的时候只需判断我们的动作是发生在哪一个组件上的即可。
明确了事件源,就要针对该事件源上发生的动作的性质来选择监听方法了。
监听方法及使用情况:
addActionListener(ActionListener l); 监听类似按钮组件上发生点击动作或者在类似输入框组件上发生回车动作
addMouseListener(MouseListener l); 监听鼠标的按下、释放、单击、进入和离开动作
addMouseMotionListener(MouseMotionListener l); 监听鼠标的移动和拖动动作
addKeyListener(KeyListener l); 监听键盘的按键按下、释放和敲击动作
当监听方法监听到相应的动作时会将动作以及事件源的信息给交给ActionListener参数对象l,l对象就会自动调用事件处理方法。
然后我们就可以来编写的我们事件处理方法了。
注:在写处理方法这个类的时候必须要实现他们对应的事件接口!并对接口中的抽象方法进行实现。
ActionListener 动作事件接口
MouseListener 鼠标事件接口
MouseMotionListener 鼠标移动事件接口
KeyListener 键盘事件接口
这里我们来介绍一下接口
首先,接口的关键字是Interface
其格式为:
public interface 接口名 extends 接口,... {
public static final 数据类型 常量名 = 值;
public abstract 返回值类型 方法名(数据类型 参数名,...);
}
注:
1.红色部分是固定的,我们写与不写系统都会自动默认为这样。
2.对比类而言,接口可以继承一个或多个接口,而一个类却最多只有一个父类。
3.接口不能实例化对象,因此不能用new
那么接口怎么实现呢?
如下:
public class 类名 extends 类名 implements 接口,... { }
注:
1.类实现接口,实际上就是类继承了接口。
2.一个类在实现接口的同时也可以去继承一个类,但前提是一定要先继承父类再实现接口,关键字的顺序是不能变的,否则就会报错。
3.实现接口中的类一定要对接口的抽象方法进行实现,对于接口的父接口中的抽象方法也一定要进行实现。
有了以上的事件监听机制我们就可以对我们的登录点击动作进行响应。
但是,我们可能会遇到这样的问题,我们的事件处理类和我们的登录界面窗体并不在同一个类中,当我们想要在事件处理时得到一个关闭窗体的效果时该怎么办呢?
遇到这种情况,我们可以在事件处理类中写一个构造方法并把窗体作为参数传给事件处理类中的某一个属性。
同理,如果是对其他的组件做出操作也可以再增加一个参数。
public class LoginListener implements ActionListener {
private JFrame f ;
private JTextField t;
public LoginListener(JFrame f,JTextField t){
this.f = f;
this.t = t;
}
public void actionPerformed(ActionEvent e){
//此处写入需要的操作
}
}
这样我们就可以对一个界面中的组件进行操作了。
以上就是一个简单的登录界面需要用到的一些知识。