------- android培训、java培训、期待与您交流! ----------
GUI编程
1.AWT简介
Abstract Window Tookit(抽象窗口工具包),需要调用本地系统实现功能,属于重量级控件是sun公司发布jdk1.0时的一个重要组成部分
2.Swing简介
不同于awt中大量引用windows函数在java中提供了一种轻量型组件--swing,swing是使用java语言实现,在awt基础上建立的一套图形界面系统,不依赖平台,争强了移植性
awt中的继承关系图
Component
|----------Button
|----------Label
|----------CheckBox
|----------TextComponent
|----------TextArea
|----------TextField
|----------Container
|----------Panel
|----------Window
|----------Frame
|----------Dialog
|----------FileDialog
3.初识布局管理器在java中专门提供了布局管理器来管理组件,通过布局管理器可以使用不同的方式进行排列组件。
常见的布局管理器有
1.FlowLayout (流水线式布局管理器)
--从左到右布局排列
--Panel 默认布局管理器
2.BorderLayout (边界布局管理器)
--东,南,西,北,中
--Frame 默认布局管理器
3.GridLayout (网格式布局管理器)
--规则的矩阵
4.CardLayout (选项卡布局管理器)
--选项卡
5.GridBagLayout (网格包布局管理器)
--非规则的矩阵
下面是简单的GUI程序
实例1
import java.awt.*;
import java.awt.Color;
public class DemoAction {
public static void main(String[] args) {
Frame f = new Frame("第一个窗体 ");
f.setLayout(new FlowLayout()); //重新设定布局管理器
Label l = new Label("标签");
f.setVisible(true); //设置组件显示
f.setSize(1366, 768); //设置组件的长和宽
f.setLocation(1001, 100); //设置组件的显示位置
f.setBackground(Color.BLUE); //设置组件的背景颜色
Button b = new Button("我是一个按钮");
//f.setResizable(false); //让组件没办法重新设置大小
f.add(b);
f.add(l);
//f.pack();
}
}
Frame 的窗体事件监听机制,尝试使用窗体上的x键关闭窗体
1.创建一个监听器的类
2.将该监听器注册到指定的对象中去
接下来介绍一个接口和一个类, WindowListener 是专门处理事件的监听接口,一个窗体的所有变化都可以使用这个监听器进行监听,另一个类是 WindowAdapter 这个类,该类实现了WindowListener
这个接口,并复写了其中的所有方法,但该类还是用 abstract 修饰了,说明该类是一个抽象类,该类不可以创建对象,只能被其他的类继承,当只需要对窗体的某个事件进行监听的话,
建议继承 WindowAdapter 之后直接覆写其中你需要监听的方法即可(如果实现 WindowListener 接口就要覆写所有的方法),看如下代码
实例2
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestWindowEventDemo {
public static void main(String[] args) {
Frame f = new Frame("监听窗体事件");
f.setSize(300, 300); //设置窗体大小
f.setLocation(200, 200); //设置窗体的位置
f.setVisible(true); //设置窗体可见
f.addWindowListener(/*new TestWindowEventDemo().new MyMonitor()*/new WindowAdapter(){
public void windowClosing(WindowEvent e) { //也可以使用匿名内部类
System.exit(0);
}
});
}
class MyMonitor extends WindowAdapter { //使用内部内定义监听器
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
}
ActionListener 的简单使用
实例3
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestActionEventDemo {
public static void main(String[] args) {
Frame f = new Frame("1号窗口");
f.setBounds(100, 100, 300, 300); //设置大小和位置
f.setVisible(true);
f.setResizable(false); //设置大小不可变
f.setLayout(new BorderLayout());
Button b1 = new Button("打开二号窗口");
Button b2 = new Button("关闭所有窗口");
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0); //退出java虚拟机
}
});
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Frame f = new Frame("2号窗口");
f.setVisible(true);
f.setResizable(false); //设置大小不可变
f.setBounds(300, 300, 300, 300);
}
});
f.add(b1, BorderLayout.WEST); //将控件添加到指定的位置
f.add(b2, BorderLayout.EAST);
}
}
鼠标事件和键盘事件的触发,这些事件处理都大同小异的,废话不多说,直接看例子
实例4
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MouseEventDemo {
public static void main(String[] args) {
Frame f = new Frame("鼠标测试");
f.setVisible(true);
f.setBounds(100, 100, 300, 300);
Button b = new Button("我是按钮");
b.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println("单击了鼠标");
if(e.getButton() == MouseEvent.BUTTON1) {
System.out.println("按下了鼠标左键");
System.out.println(e.getXOnScreen() + " " + e.getYOnScreen());
} else if(e.getButton() == MouseEvent.BUTTON2) {
System.out.println("按下了鼠标中键");
System.out.println(e.getXOnScreen() + " " + e.getYOnScreen());
} else if(e.getButton() == MouseEvent.BUTTON3) {
System.out.println("按下了鼠标右键");
System.out.println(e.getXOnScreen() + " " + e.getYOnScreen());
}
}
/* public void mousePressed(MouseEvent e) {
System.out.println("按下了鼠标");
}
public void mouseReleased(MouseEvent e) {
System.out.println("释放了鼠标");
}
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标进入了指定区域");
}
public void mouseExited(MouseEvent e) {
System.out.println("鼠标离开了指定区域");
}*/
});
f.add(b);
//f.pack();
}
}
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class KeyEventDemo {
public static void main(String[] args) {
Frame f = new Frame("键盘事件");
f.setBounds(100, 100, 400, 400);
f.setVisible(true);
Button b = new Button("关闭程序");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
TextField tf = new TextField(10);
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(!(e.getKeyCode() >= KeyEvent.VK_0 && e.getKeyCode() <= KeyEvent.VK_9) ||e.isShiftDown()) {
//System.out.println("-----------");
e.consume();
}
}
});
f.setLayout(new GridLayout(1, 2));
f.add(tf);
f.add(b);
f.pack();
}
}