黑马程序员_Java_GUI
2015-03-08 11:43
232 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、GUI概述
1、 GUI:Graphical User Interface(图形用户接口)。
用图形的方式,来显示计算机的操作图形界面。方便、直观。
CLI:Command line User Interface(命令行用户接口),就是DOS 命令行操作,不直观。
2、 Java 为GUI 提供的对象,都存在java.Awt 和javax.Swing 两个包中。
Awt 与Swing:
java.Awt : (Abstract Window Toolkit,抽象窗口工具集),需要调用本地系统方法实现功能。属重量级控件。跨平台性较弱。
javax.Swing :在AWT 基础上,建立一套图形界面系统,其中提供了更多组件,而且完全由Java 实现。增强了可移植性,属轻量级控件。
开发时,制作图形化界面时,一般需要导入两个包:import java.awt.; 和import java.awt.event.;
3、 GUI继承关系图:
二、布局管理器
1、布局:容器中组件的排放方式。
2、 常见的布局管理器:
FlowLayout(流式布局管理器):从左到右的顺序排列。Panel 默认的布局管理器。
BorderLayout(边界布局管理器):东南西北中。Frame 默认的布局管理器。
GridLayout(网络布局管理器):规则的矩阵。
GardLayout(卡片布局管理器):选项卡。
GridBagLayout(网格包布局管理器):非规矩的矩阵。
三、Component
1、 Component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。
2、 常用子类:Window、Panel(面板,不能单独存在)
Window 常用子类:Frame、Dialog
Frame 类:是带有标题和边框的顶层窗口。若显示窗体,必须设置setVisible 显示。设置Frame 时,有一个默认的管理器是边界式布局(BorderLayout)。
3、 方法
add() //添加组件(含参数)
setVisible(Boolean b) //根据参数的值来显示或隐藏组件
setSize() //设置窗体大小,参数为窗口的横坐标和纵坐标
setLocation() //设置窗体在本地位置,参数为横、纵坐标
setLayout() //设置布局管理器(参数可以是相应布局管理器的对象)
setBounds() //移动组件并调整其大小,参数是4 个坐标(左边距、右边距、宽、高)
addMouseListener() //添加指定的鼠标监听器
addKeyListener() //添加键盘监听事件
4、 创建图形化界面的步骤:
1)创建frame 窗体。
2)对窗体进行基本设置。比如大小,位置,布局。
3)定义组件。
4)将组件通过窗体的add 方法添加到窗体中。
5)让窗体显示,通过setVisible(true)
代码示例:
四、事件监听机制
1、 事件监听机制组成:事件源、事件(Event)、监听器(Listener)、事件处理(引发事件后处理方式)。
(1)事件源(组件):awt或swing包中的那些图形界面组件
(2)事件(Event):每一个事件源都有自己特有的对应事件和共性事件
(3)监听器(Listener):将可触发某一事件的动作(不只一个动作),都封装到侦听器中。
(4)事件处理:引发事件后的处理方式。
2、 事件监听机制流程图
3、 使用说明
组成的前三个在java中都已将定义好了,直接获取其对象来用即可,我们需要做的就是对产生的动作进行处理。
步骤:
(1)确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
(2)一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
代码示例:
五、Window(窗体)
1、 监听:addWindowListener():添加窗口事件监听器
2、 WindowListener接口,复写方法,实例化对象,才能使用。但它有一个已复写全部方法的子类WindowAdapter。
3、WindowAdapter:接收窗口事件的抽象适配器类。此类中的方法为空。它是一个没有抽象方法的抽象类,目的是不能创建对象。此类存在的意思是方便创建监听器对象。使用:因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。并覆盖了其中的所有方法,那么只要继承WindowAdapter,覆盖需要的方法即可。
方法:
windowActivated():激活窗口时调用。
windowClosed():当窗口已被关闭时调用。
windowClosing():窗口正处在关闭过程中时调用。
windowDeactivated():后置窗口时调用。
windowDeiconified():取消图标化窗口时调用。
windowGainedFocus():该 Window 被设置为聚焦 Window 时调用,聚焦 Window 意味着该 Window 或其某个子组件将接收键盘事件。
windowIconified():窗口最小化时调用。
windowLostFocus():该 Window 不再为聚焦 Window 时调用,不再为聚焦 Window 意味着键盘事件不再传递到该 Window 或其任意子组件。
windowOpened():打开窗口时调用。
windowStateChanged():窗口状态改变时调用。
代码示例:
六、Button(按钮)
1、监听:addActionListener():添加指定的动作监听器
2、 ActionListener 接口:用于接收操作事件的监听器接口。是少数没有适配器接口的其中一个。
其中只有一个方法actionPerformed(),作用:发生操作时调用。
3、 代码示例:
七、鼠标事件和键盘事件
7.1 鼠标事件
1、 MouseListener: 用于接收组件上“感兴趣的”鼠标事件(eg:按下、释放、单击、进入或离开)的监听器接口。有适配器。
2、 方法:
mouseClicked(MouseEvent e) //鼠标单击(按下并释放)
mouseEntered(MouseEvent e) //鼠标进入组件
mouseExited(MouseEvent e) //鼠标离开组件
mousePressed(MouseEvent e) //鼠标按下时
mouseReleased(MouseEvent e) //鼠标释放时
3、 MouseEvent: (适配器)
成员变量:static int mouse_clicked
方法:int getClickCount() //返回鼠标单击次数
7.2 键盘事件
1、 keyListener: 接收键盘事件的监听器接口。有适配器。
2、 方法:
keyPressed(keyEvent e) //按下某个键时调用此方法
keyReleased(keyEvent e) //释放某个键时调用此方法
keyTyped(keyEvent e) //键入某个键时调用此方法
3、 keyEvent: (适配器)
char getkeyChar() //返回与此事件中的键相关联的字符
int getkeyCode() //获取键盘对应的码
static String getKeyText(int keyCode) //通过码获取对应的键盘字符
InputEvent 类中isControlDown() //判断ctrl 键是否被按下
InputEvent 类中consume() //以非默认方式处理事件,屏蔽键
代码示例:
八、MenuBar(菜单栏)
1、 MenuBar 类: 封装绑定到框架的菜单栏的平台概念。为了将该菜单栏与Frame 对象关联,可以调用该框架的setMenuBar 方法。
2、 主要方法:
add() //添加菜单栏
3、 关联类:
MenuItem 类:菜单项
MenuMenuMenuMenu类:菜单条
add() //将指定菜单项或者标签添加到菜单栏。
MenuBar包括Menu,Menu包括MenuItem、Menu(带箭头)。
代码示例:
九、Jar包双击执行
既然是图形化界面,就需要通过图形化界面的形式运行程序,而不是是用Dos命令行执行,那么如何通过双击程序就执行程序呢?这就需要将程序的class文件打包。
步骤如下:
1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;
2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件
3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。
4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令
5、此时双击即可执行。
一、GUI概述
1、 GUI:Graphical User Interface(图形用户接口)。
用图形的方式,来显示计算机的操作图形界面。方便、直观。
CLI:Command line User Interface(命令行用户接口),就是DOS 命令行操作,不直观。
2、 Java 为GUI 提供的对象,都存在java.Awt 和javax.Swing 两个包中。
Awt 与Swing:
java.Awt : (Abstract Window Toolkit,抽象窗口工具集),需要调用本地系统方法实现功能。属重量级控件。跨平台性较弱。
javax.Swing :在AWT 基础上,建立一套图形界面系统,其中提供了更多组件,而且完全由Java 实现。增强了可移植性,属轻量级控件。
开发时,制作图形化界面时,一般需要导入两个包:import java.awt.; 和import java.awt.event.;
3、 GUI继承关系图:
二、布局管理器
1、布局:容器中组件的排放方式。
2、 常见的布局管理器:
FlowLayout(流式布局管理器):从左到右的顺序排列。Panel 默认的布局管理器。
BorderLayout(边界布局管理器):东南西北中。Frame 默认的布局管理器。
GridLayout(网络布局管理器):规则的矩阵。
GardLayout(卡片布局管理器):选项卡。
GridBagLayout(网格包布局管理器):非规矩的矩阵。
三、Component
1、 Component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。
2、 常用子类:Window、Panel(面板,不能单独存在)
Window 常用子类:Frame、Dialog
Frame 类:是带有标题和边框的顶层窗口。若显示窗体,必须设置setVisible 显示。设置Frame 时,有一个默认的管理器是边界式布局(BorderLayout)。
3、 方法
add() //添加组件(含参数)
setVisible(Boolean b) //根据参数的值来显示或隐藏组件
setSize() //设置窗体大小,参数为窗口的横坐标和纵坐标
setLocation() //设置窗体在本地位置,参数为横、纵坐标
setLayout() //设置布局管理器(参数可以是相应布局管理器的对象)
setBounds() //移动组件并调整其大小,参数是4 个坐标(左边距、右边距、宽、高)
addMouseListener() //添加指定的鼠标监听器
addKeyListener() //添加键盘监听事件
4、 创建图形化界面的步骤:
1)创建frame 窗体。
2)对窗体进行基本设置。比如大小,位置,布局。
3)定义组件。
4)将组件通过窗体的add 方法添加到窗体中。
5)让窗体显示,通过setVisible(true)
代码示例:
package demo.awt; import java.awt.*; import java.awt.event.*; public class FrameDemo { private Frame f; private Button but; FrameDemo(){ init(); } public void init(){ f=new Frame("my frame");//新建Frame,标题为my frame f.setBounds(300,100,600,500);//设置边界 f.setLayout(new FlowLayout());//设置模式 f.setVisible(true);//设置为可见 } public static void main(String[] args) { new FrameDemo(); } }
四、事件监听机制
1、 事件监听机制组成:事件源、事件(Event)、监听器(Listener)、事件处理(引发事件后处理方式)。
(1)事件源(组件):awt或swing包中的那些图形界面组件
(2)事件(Event):每一个事件源都有自己特有的对应事件和共性事件
(3)监听器(Listener):将可触发某一事件的动作(不只一个动作),都封装到侦听器中。
(4)事件处理:引发事件后的处理方式。
2、 事件监听机制流程图
3、 使用说明
组成的前三个在java中都已将定义好了,直接获取其对象来用即可,我们需要做的就是对产生的动作进行处理。
步骤:
(1)确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
(2)一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
代码示例:
import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; public class AwtDemo { public static void main(String[] args) { Frame f=new Frame("my awt"); f.setSize(500, 100);//设置大小 f.setLocation(300, 200);//设置位置 f.setLayout(new FlowLayout());//设置布局模式 Button b=new Button("我是一个按钮"); f.add(b); f.addWindowListener(new MyWin());//添加监听器 f.setVisible(true); } } class MyWin extends WindowAdapter{ public void windowClosing(WindowEvent e) { System.exit(0); } }
五、Window(窗体)
1、 监听:addWindowListener():添加窗口事件监听器
2、 WindowListener接口,复写方法,实例化对象,才能使用。但它有一个已复写全部方法的子类WindowAdapter。
3、WindowAdapter:接收窗口事件的抽象适配器类。此类中的方法为空。它是一个没有抽象方法的抽象类,目的是不能创建对象。此类存在的意思是方便创建监听器对象。使用:因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。并覆盖了其中的所有方法,那么只要继承WindowAdapter,覆盖需要的方法即可。
方法:
windowActivated():激活窗口时调用。
windowClosed():当窗口已被关闭时调用。
windowClosing():窗口正处在关闭过程中时调用。
windowDeactivated():后置窗口时调用。
windowDeiconified():取消图标化窗口时调用。
windowGainedFocus():该 Window 被设置为聚焦 Window 时调用,聚焦 Window 意味着该 Window 或其某个子组件将接收键盘事件。
windowIconified():窗口最小化时调用。
windowLostFocus():该 Window 不再为聚焦 Window 时调用,不再为聚焦 Window 意味着键盘事件不再传递到该 Window 或其任意子组件。
windowOpened():打开窗口时调用。
windowStateChanged():窗口状态改变时调用。
代码示例:
package demo.awt; import java.awt.*; import java.awt.event.*; import java.io.File; public class MyWindowDemo { private Frame f; private TextField tf; private Button bt; private TextArea ta; private Dialog d; private Label lab; private Button okbt; MyWindowDemo(){ init(); } public void init(){//初始化窗口 f=new Frame("my window"); f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); tf=new TextField(60); bt=new Button("转到"); ta=new TextArea(25,70); d=new Dialog(f, "提示信息-self",true); lab=new Label(); okbt=new Button("确定"); d.add(lab); d.add(okbt); d.setBounds(400,200,240,150); d.setLayout(new FlowLayout()); f.add(tf); f.add(bt); f.add(ta); myEvent(); f.setVisible(true); } private void myEvent() {//事件监听函数 okbt.addActionListener(new ActionListener() {//按钮事件监听器 public void actionPerformed(ActionEvent e) { d.setVisible(false); } }); d.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { d.setVisible(false); } }); bt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String path=tf.getText(); File file=new File(path); if(file.exists()&&file.isDirectory()){ String[] dir=file.list(); for(String s:dir){ ta.append(s+"\n"); } } else{ String info="找不到"+path; lab.setText(info); d.setVisible(true); } } }); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MyWindowDemo(); } }
六、Button(按钮)
1、监听:addActionListener():添加指定的动作监听器
2、 ActionListener 接口:用于接收操作事件的监听器接口。是少数没有适配器接口的其中一个。
其中只有一个方法actionPerformed(),作用:发生操作时调用。
3、 代码示例:
bt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { d.setVisible(false); } });
七、鼠标事件和键盘事件
7.1 鼠标事件
1、 MouseListener: 用于接收组件上“感兴趣的”鼠标事件(eg:按下、释放、单击、进入或离开)的监听器接口。有适配器。
2、 方法:
mouseClicked(MouseEvent e) //鼠标单击(按下并释放)
mouseEntered(MouseEvent e) //鼠标进入组件
mouseExited(MouseEvent e) //鼠标离开组件
mousePressed(MouseEvent e) //鼠标按下时
mouseReleased(MouseEvent e) //鼠标释放时
3、 MouseEvent: (适配器)
成员变量:static int mouse_clicked
方法:int getClickCount() //返回鼠标单击次数
7.2 键盘事件
1、 keyListener: 接收键盘事件的监听器接口。有适配器。
2、 方法:
keyPressed(keyEvent e) //按下某个键时调用此方法
keyReleased(keyEvent e) //释放某个键时调用此方法
keyTyped(keyEvent e) //键入某个键时调用此方法
3、 keyEvent: (适配器)
char getkeyChar() //返回与此事件中的键相关联的字符
int getkeyCode() //获取键盘对应的码
static String getKeyText(int keyCode) //通过码获取对应的键盘字符
InputEvent 类中isControlDown() //判断ctrl 键是否被按下
InputEvent 类中consume() //以非默认方式处理事件,屏蔽键
代码示例:
package demo.awt; import java.awt.*; import java.awt.event.*; public class MouseAndKeyEvent { private Frame f; private Button but; MouseAndKeyEvent(){ init(); } public void init(){//初始化 f=new Frame("my frame"); f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); Button b=new Button("按钮"); f.add(b); b.addMouseListener(new MouseAdapter() {//鼠标监听 public void mouseEntered(MouseEvent e) { System.out.println("鼠标进入该组件"); } }); b.addKeyListener(new KeyAdapter() {//键盘监听 public void keyPressed(KeyEvent e) { if(e.getKeyCode()==e.VK_A) System.out.println("yiyang"); } }); f.setVisible(true); } public static void main(String[] args) { new MouseAndKeyEvent(); } }
八、MenuBar(菜单栏)
1、 MenuBar 类: 封装绑定到框架的菜单栏的平台概念。为了将该菜单栏与Frame 对象关联,可以调用该框架的setMenuBar 方法。
2、 主要方法:
add() //添加菜单栏
3、 关联类:
MenuItem 类:菜单项
MenuMenuMenuMenu类:菜单条
add() //将指定菜单项或者标签添加到菜单栏。
MenuBar包括Menu,Menu包括MenuItem、Menu(带箭头)。
代码示例:
package demo.awt; import java.awt.*; import java.awt.Event.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MyMenuDemo { private Frame f; private MenuBar mb; private Menu m; private MenuItem closeItem,openItem,saveItem; MyMenuDemo(){ init(); } private void init() { f=new Frame("my window"); f.setBounds(300,100,500,600); f.setLayout(new FlowLayout()); //添加菜单栏 mb=new MenuBar(); m=new Menu("文件"); closeItem=new MenuItem("退出"); openItem=new MenuItem("打开"); saveItem=new MenuItem("保存"); m.add(openItem); m.add(saveItem); m.add(closeItem); mb.add(m); f.setMenuBar(mb); myEvent(); f.setVisible(true); } private void myEvent() {//菜单点击事件 openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new FileDialog(f,"打开文件",FileDialog.LOAD).setVisible(true); } }); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new FileDialog(f,"保存文件",FileDialog.SAVE).setVisible(true); } }); closeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MyMenuDemo(); } }
九、Jar包双击执行
既然是图形化界面,就需要通过图形化界面的形式运行程序,而不是是用Dos命令行执行,那么如何通过双击程序就执行程序呢?这就需要将程序的class文件打包。
步骤如下:
1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;
2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件
3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。
4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令
5、此时双击即可执行。
相关文章推荐
- 黑马程序员_java基础-图形用户接口GUI(Graphical User Interface)
- 黑马程序员_Java GUI
- 黑马程序员——java语言——GUI
- 黑马程序员_java_GUI
- 黑马程序员——Java基础---GUI
- Java图形化界面GUI-02-----黑马程序员
- 黑马程序员——高新技术---Java基础-GUI编程
- 黑马程序员-java的GUI总结
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-1
- 黑马程序员——JAVA 编解码表与GUI
- 黑马程序员_java_GUI总结
- 黑马程序员——Java基础---GUI(图形用户界面)
- 黑马程序员——java之GUI编程
- 黑马程序员_java GUI 组件和事件总结
- 黑马程序员——java中的 GUI
- 黑马程序员 java学习笔记 Day6:GUI
- 黑马程序员--------java GUI图形界面编程
- 黑马程序员_Java GUI编程
- 黑马程序员--Java基础总结--GUI
- 黑马程序员----Java基础之GUI