目录
由于java中的GUI不是特别强大,在实际开发与面试中也不多见,这里不做过多篇幅的叙述,仅作学习了解。
一、创建窗口并显示
在java中,我们一般使用Frame类来创建窗口,Frame是带有标题和边框的顶层窗口,有以下几个构造方法,
Frame()//构造一个新的窗口,初始不可见
Frame(String title)//构造一个指定标题的新窗口,初始不可见
然后是具体实现,
import java.awt.*;
public class GUITest {
public static void main(String[] args) {
Frame f=new Frame("javaFrame");//创建指定标题窗口
f.setSize(400,300);//设置窗体大小
f.setLocation(300,100);//设置窗体位置
f.setIconImage(Toolkit.getDefaultToolkit().createImage("luffy.jpg"));//设置窗口程序左上角图标
f.setVisible(true);//设置窗口可见
}
}
下面是创建出来的窗口,
二、布局管理器
布局管理器用于管理界面布局的,Java有6种布局管理器,我们先学习前五种,
AWT提供了5种:
- FlowLayout(流式布局):从左到右的顺序排列,是Panel默认的布局管理器
- BorderLayout(边界布局):将布局分为东南西北中五块,为Frame默认的布局管理器
- GridLayout(网格布局):为规则的矩阵布局
- GridBagLayout(网格包布局):为非规则的矩阵布局
- CradLayout(卡片布局):一般用于选项卡片布局
Swing还提供了一种:
- BoxLayout(盒子布局):是在一个方向上排列组件,从左往右水平排列,或者从上往下竖直排列
我们来看看具体使用,
import java.awt.*;
public class GUITest {
public static void main(String[] args) {
Frame f=new Frame("javaFrame");//创建指定标题窗口
f.setSize(400,300);//设置窗体大小
f.setLocation(300,100);//设置窗体位置
f.setIconImage(Toolkit.getDefaultToolkit().createImage("luffy.jpg"));//设置窗口程序左上角图标
Button b1=new Button("ok");//新建一个按钮对象
Button b2=new Button("cancle");//新建一个按钮对象
f.add(b1);//将按钮添加到窗口中
f.add(b2);//将按钮添加到窗口中
f.setLayout(new FlowLayout());//设置布局管理器为流布局
f.setVisible(true);//设置窗口可见
}
}
三、窗体监听
我们在创建窗体后,发现点击右上角的×,程序没有退出,没有反应,
现在我们在窗体上添加监听,就可以实现点击×,关闭程序的效果,
我们要添加监听,就需要用到WindowListener抽象类,而且必须实现其中的所有抽象方法,
如果我们是只要用到它里面的某一个方法比如需要重写关闭窗口时的方法,那么就可以用到WindowAdapter类,
WindowAdapter也是抽象类,它实现了WindowListener类中的所有方法,不过方法体全为空,这样我们就不用重写全部方法了, 用什么就重写什么,
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class GUITest {
public static void main(String[] args) {
Frame f=new Frame("javaFrame");//创建指定标题窗口
f.setSize(400,300);//设置窗体大小
f.setLocation(300,100);//设置窗体位置
f.setIconImage(Toolkit.getDefaultToolkit().createImage("luffy.jpg"));//设置窗口程序左上角图标
Button b1=new Button("ok");//新建一个按钮对象
Button b2=new Button("cancle");//新建一个按钮对象
f.add(b1);//将按钮添加到窗口中
f.add(b2);//将按钮添加到窗口中
f.setLayout(new FlowLayout());//设置布局管理器为流布局
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);//关闭程序
}
});
f.setVisible(true);//设置窗口可见
}
}
然后点击×,程序就正常关闭了,
四、鼠标监听
鼠标监听即当鼠标进行了某些行为时(例如鼠标单击,进入与离开等等),程序会根据行为做出相应的反应,
我们测试一下,添加一个按钮exit,点击按钮程序就会退出,
import java.awt.*;
import java.awt.event.*;
public class GUITest {
public static void main(String[] args) {
Frame f=new Frame("javaFrame");//创建指定标题窗口
f.setSize(400,300);//设置窗体大小
f.setLocation(300,100);//设置窗体位置
f.setIconImage(Toolkit.getDefaultToolkit().createImage("luffy.jpg"));//设置窗口程序左上角图标
Button b1=new Button("exit");
//给退出按钮添加鼠标监听,当鼠标单击时退出程序
//这里我们同样用的是MouseAdapter,如果使用MouseListener则要重写所有的抽象方法
b1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.exit(0);
}
});
f.add(b1);
f.setLayout(new FlowLayout());//设置布局管理器为流布局
f.setVisible(true);//设置窗口可见
}
}
五、键盘监听和键盘事件
键盘监听就是当键盘产生行为时,程序检测到行为并针对该行为执行某些操作,
我们测试一下按下空格键的,程序就会退出,判断键盘按下的是否为空格键就可以用到键盘事件,
import java.awt.*;
import java.awt.event.*;
public class GUITest {
public static void main(String[] args) {
Frame f=new Frame("javaFrame");//创建指定标题窗口
f.setSize(400,300);//设置窗体大小
f.setLocation(300,100);//设置窗体位置
f.setIconImage(Toolkit.getDefaultToolkit().createImage("luffy.jpg"));//设置窗口程序左上角图标
Button b1=new Button("exit");
//给退出按钮添加键盘监听,当键盘输入空格键时退出程序
//这里我们同样用的是KeyAdapter,如果使用KeyListener则要重写所有的抽象方法
b1.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_SPACE){//如果敲下空格键就退出
System.exit(0);
}
}
});
f.add(b1);
f.setLayout(new FlowLayout());//设置布局管理器为流布局
f.setVisible(true);//设置窗口可见
}
}
六、Adapter适配器
在使用监听器的时候,需要定义一个类事件监听器接口,而这个接口中有很多的方法,
程序不一定都会用得到, 但是必须要全部重写,这样就比较繁琐,
Adapter适配器就简化了这些操作,我们定义监听器时只需要继承适配器,然后重写需要的方法即可。
适配器的原理如下:
- 适配器就是一个类,实现了监听器接口,并且它重写了里面的所有抽象方法,但是里面的方法都是空的
- 适配器类需要定义称抽象的,因为创建该类对象,调用空方法是没有意义的
我们简单实现一下适配器设计模式,
public class GUITest {
public static void main(String[] args) {
Dad dad=new Dad();
dad.work();
Mom mom=new Mom();
mom.born();
Child child =new Child();
child.study();
}
}
interface People{
void study();
void work();
void born();
}
abstract class PeopleAdapter implements People{
public void study() {}
public void work() {}
public void born() {}
}
class Mom extends PeopleAdapter{
public void born(){
System.out.println("母亲生下了孩子");
}
}
class Dad extends PeopleAdapter{
public void work(){
System.out.println("父亲工作养家");
}
}
class Child extends PeopleAdapter{
public void study(){
System.out.println("孩子努力读书学习");
}
}
七、GUI名词
- 事件:用户的操作,包括鼠标键盘等
- 事件源:被操作的组件,比如按钮等
- 监听器:一个自定义类的对象,实现了监听器接口,包含事件处理方法。把监听器添加在事件源上,当事件发生的时候JVM就会自动调用监听器中的事件处理方法。