第七节 GUI的复习
一、AWT及事件监听
- AWT与Swing
AWT:抽象窗口工具包,重量级控件。
Swing:AWT基础上,建立的一套图形界面系统,轻量级空间。 - 继承关系图:
- AWT事件监听:
事件源(组件)、事件(Event)、监听器(Listener)、事件处理(引发事件后处理方式–处理代码)。例1: import java.awt.*; import java.awt.event.*; public class Exam01 { public static void main(String[] args) { //创建窗体对象 Frame f= new Frame(); //设置窗体属性 f.setTitle("关闭窗口"); f.setSize(400,300); f.setLocation(400,200); //适配器类,实现重写方法,关闭窗口 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); f.setVisible(true); } }
- public void windowOpened(windowEvent e):方法,窗口启动时自动执行。
(注:可以实现弹出窗口,若要关闭窗口则关闭程序;可以实现启动时加载文字信息;可以实现弹出提示信息。) - 鼠标与键盘事件监听:
例2: public class Exam02 { public static void main(String[] args) { final Frame f = new Frame("Flowlayout");// 创建一个名为Flowlayout的窗体 // 设置窗体中的布局管理器为FlowLayout,所有组件左对齐,水平间距为20,垂直间距为30 f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 30)); f.setSize(200, 300); // 设置窗体大小 f.setLocation(300, 200); // 设置窗体显示的位置 Button but1 = new Button("第1个按钮");// 创建第1个按钮 f.add(but1); // 把"第1个按钮"添加到f窗口 // 下面的代码是每点击一次“第1个按钮”就向窗体中添加一个按钮 //动作事件监听: but1.addActionListener(new ActionListener() { // 动作事件为第1个按钮添加点击事件 //鼠标事件监听: //but1.addMouseListener(new MouseAdapter() { // public void mouseClicked(windowEvent e){} //}); private int num = 1; // 定义变量num,记录按钮的个数 public void actionPerformed(ActionEvent e) { f.add(new Button("第" + ++num + "个按钮"));// 向窗体中添加新按钮 // f.setVisible(true); // 刷新窗体显示新按钮 } }); //键盘事件监听: //but1.addKeyListener(new KeyAdapter() { // public void keyPressed(windowEvent e){} //}); f.setVisible(true); // 设置窗体可见 } }
例3: import java.awt.event.*; import java.awt.*; public class Exam03 { public static void main(String[] args) { final Frame f = new Frame("Flowlayout"); f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 30)); f.setSize(500, 400); // 设置窗体大小 f.setLocation(300, 200); // 设置窗体显示的位置 Button but = new Button("my button"); TextField tf = new TextField(40); //单行文本框,长度40 f.add(but); f.add(tf); tf.addKeyListener(new KeyAdapter() { // 键盘监听 @Override public void keyPressed(KeyEvent e){ int code = e.getKeyCode(); if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){ System.out.println("必须是0-9数字"); //e.consume(); } }}); f.setVisible(true); // 设置窗体可见 } }
二、布局管理器
-
五种布局管理器:
FlowLayout、BorderLayout、GridLayout、GridBagLayout、CardLayout。 -
FlowLayout:基本布局,从左到右,从上至下。
-
BorderLayout:边界布局管理器,东西南北中,五个方位。
-
GridLayout:网格布局,划分区块大小相同。
-
GridBagLayout:网格包布局,网格布局升级,划分区块大小可不一致。
-
CardLayout:卡片布局。切换程序。(常用:卡片布局注册到监听器中,监听器绑定按钮,实现切换程序页面。)
-
Graphics:所有图形上下文抽象的类,可以用于绘图使用。
方法:setColor():设置颜色、setFont():设置字体、drawRect():绘制矩形、drawOval():绘制椭圆、drawString():绘制一段文字。
三、Swing体系
-
Swing:AWT基础上,建立的一套图形界面系统,轻量级空间。
-
Swing使用:一般都为AWT组件(类)名称前加J。如:JFrame。
-
JDialog类:JDialog和Dialog都是一个对话框。
JDialog分为模态和非模态对话框。模态对话框须在用户处理完当前窗口后,才可以处理其他窗口。非模态对话框可以处理其他窗口。
JDialog(Frame owner,boolean model);:当modal为true时,是模态对话框,当modal为false时,是非模态对话框。 -
JFrame:JFrame和Frame都是创建一个窗体。
注:1、当java文件继承JFrame类时,可以不用再创建JFrame对象,直接通过this方法调用。
注:2、两者区别是JFrame提供了一个关闭按钮的默认操作,其语法为:this.setDefaultCloseOperation(Frame.(JFrame.EXIT_ON_CLOSE));
-
JPanel:JPanel和Panel都是创建一个面板。(无边框、不能移动、放大、缩小。)
-
JScrollPane:滚动面板,只能存放一个组件。(若要放多个组件,可将组件放到JPanel中,再将JPanel放到JScrollPane滚动面板中。)
-
JTextComponent:主要用于接受用户的输入或者向用户展示信息。包括:JTextField和JTextArea。
this.setDefaultCloseOperation(Frame.(JFrame.EXIT_ON_CLOSE));
-
JCheckBox组件:复选框按钮。
(注:ABstractButton:是所有按钮的基类。) -
JRadioButton组件:单选框按钮。只能选中一个。
-
JComboBox组件:组合框(下拉列表框)。
方法:JComboBox(Object[] items); //创建包含指定数组中的JCmboBOx。 JComboBox(Vector<?> iteams); //创建包含指定Vector中元素的JComboBox。
-
菜单:下拉式菜单、弹出式菜单
-
下拉式菜单:菜单栏(JMenuBar)、菜单(JMenu)、菜单项(JMenuItem)。
使用:创建一个JMenuBar对象,放置在JFrame顶部。创建JMenu对象,添加到JMenu菜单栏中,创建JMenuItem对象,添加到JMenu菜单中。例4: import java.awt.event.*; import javax.swing.*; public class Exam04 extends JFrame { public Exam04() { JMenuBar menuBar = new JMenuBar(); // 创建菜单栏 this.setJMenuBar(menuBar); // 将菜单栏添加到JFrame窗口中 JMenu menu = new JMenu("操作"); // 创建菜单 menuBar.add(menu); // 将菜单添加到菜单栏上 // 创建两个菜单项 JMenuItem item1 = new JMenuItem("弹出窗口"); JMenuItem item2 = new JMenuItem("关闭"); // 为菜单项添加事件监听器 item1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 创建一个JDialog窗口 JDialog dialog = new JDialog(Example22.this, true); dialog.setTitle("弹出窗口"); dialog.setSize(200, 200); dialog.setLocation(50, 50); dialog.setVisible(true); } }); item2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); menu.add(item1); // 将菜单项添加到菜单中 menu.addSeparator(); // 添加一个分隔符 menu.add(item2); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(300, 300); this.setVisible(true); } public static void main(String[] args) { new Exam04 (); } }
-
JPopupMenu:弹出式菜单,和下拉式菜单功能相似、用法相似。
四、案例包
- 更多案例请下载案例包:
- 案例包名为:【卡片布局、验证码、弹出菜单案例.zip】
End.