黑马程序员- GUI图形用户界面
2013-06-14 10:28
302 查看
------- android培训、java培训、期待与您交流! ----------
1,简介
GUI
Graphical User Interface(图形用户接口).
用图形的方式,来显示计算机操作的界面,这样更方便更直观
CLI
Command line User Interface(命令行接口)
就是常见的Dos命令行操作
需要记忆一些常用的命令,操作不直观
java 为GUI提供的对象都在java.Awt和javax.Swing两个包中。
Awt和Swing
java.Awt:Absttact Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属于重量级控件。对系统依赖性较强
javax.Swing:在Awt的基础上,建立一套 图形界面系统,其中提供了更多的组件,而且完全有java实现。增强了可移植性,属于轻量级别控件
继承关系图
Container:为容器,是一个特殊的组件,该组件可以通过add方法添加其他组件进来
布局管理器
容器中的组件的排放方式,就是布局
常见的布局管理器
FlowLayout(流式布局管理器)
从左到右的顺序排列
Panel默认的布局管理器
BorderLayout(边界布局管理器)
东,南,西,北中
Frame默认的布局管理器
GridLayout(网格布局管理器)
规则的矩阵
GardLayout(卡片布局管理器)
非规则的矩阵
2,Frame
Frame基本界面步骤。代码如下:
3,事件监听机制
事件源(组件)
事件(Event)
监听器 (Lisener)
事件处理(引发事件处理方式)
4 Action事件
组件活动时触发 代码如下:
5 鼠标事件
在任何组件上都可以发生鼠标事件,入:鼠标进入组件,退出组件,在组件上方单机鼠标,
拖动鼠标都发生鼠标事件,也就是说,组件可以成为发生鼠标事件的事件源
事件类型是MouseEvent,即当发生鼠标事件时,MouseEvent类自动创建一个事件对象。
MouseEvent类中有几个重要的方法。
1,getX();事件源的x坐标
2,getY();事件源的y坐标
3,getModifiers()获取鼠标的左键或右键。鼠标的左键和右键分别使用InputEvent类中的常量BUTTONI_MASK和BUTTON3来表示
4,getClickCount()获取鼠标被单机的次数
6 键盘事件,文本框只能输入数字,组合键
在java事件模式中,必需有发生事件的事件源. 当一个组件处于激活状态时.敲击任何一个键,就会发生键盘事件.
具体的看代码示例 如下:
7 Dialog 列出指定目录的内容,不存在的显示 示例
Dialog类和Frame类都是window的子类。对话框必须依赖于某个窗口或组件,当它所依赖的窗口或组件消失时,对话框也消失;当它所依赖的窗口或组件可见时,对话框会自动恢复。
主要方法
Dialog(Frame f,String s):构造一个具有标题s的初始化不可见的对话框,所依赖的窗口。
Dialog(Frame f,String s,boolean b):构造一个具有标题s的初始化不可见的对话框所依赖的窗口,b决定对话框是有模式或无模式。
getTitle();获取对话框标题
setTitle();设置对话框的标题
setModel(boolean b)设置对话框的模式
setSize();设置对话框的大小
setVisible(boolean b)
对话框的模式
有模式对话框:对话框牌激活状态,只让程序响应对话框内部的事件,程序不能再激活它所依赖的窗口或组件,并堵塞其他线程的执行。
无模式对话框处于非激活状态,程序仍能激活它所依赖的窗口或组件,它也不堵塞线程的执行
8,MenuBar,包含子菜单选项
菜单是窗口中常见的界面,是由
菜单项 (MenuBar) 菜单(Menu) 菜单项(MenuItem) 复选菜单项(CheckboxMenuItem)等对象组成
MenuBar 就是负责创建菜单条的,即MenuBar的一个实例就是一个菜单项。MenuBar bar=new MenuBar();
Frame类有一个将菜单条放置到窗口中的方法,其一般格式为:setMenuBar(MenuBar menubar);,只能向窗口添加一个菜单条
Menu()建立一个空标题的菜单
Menu(String s)建立一个指定标题菜单,由参数s确定
若要创建菜单Menu,并添加到空菜单条对象bar中,可执行:Menu m1=nw Menu("file"); bar.add(m1);
MenuItem 类负责为菜单创建菜单项,或为每个菜单项创建其包含的更小的菜单子项MenuItem,并把菜单子项添加到菜单项中。
MenuItem open=new MenuItem("open"); m1.add(open);
9,FileDialog一个简单的保存文件读取文件的文本编辑器。
是Dialog的子类
FileDialog(Dialog parent,String title, int mode)
创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。
如果
1,简介
GUI
Graphical User Interface(图形用户接口).
用图形的方式,来显示计算机操作的界面,这样更方便更直观
CLI
Command line User Interface(命令行接口)
就是常见的Dos命令行操作
需要记忆一些常用的命令,操作不直观
java 为GUI提供的对象都在java.Awt和javax.Swing两个包中。
Awt和Swing
java.Awt:Absttact Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属于重量级控件。对系统依赖性较强
javax.Swing:在Awt的基础上,建立一套 图形界面系统,其中提供了更多的组件,而且完全有java实现。增强了可移植性,属于轻量级别控件
继承关系图
Container:为容器,是一个特殊的组件,该组件可以通过add方法添加其他组件进来
布局管理器
容器中的组件的排放方式,就是布局
常见的布局管理器
FlowLayout(流式布局管理器)
从左到右的顺序排列
Panel默认的布局管理器
BorderLayout(边界布局管理器)
东,南,西,北中
Frame默认的布局管理器
GridLayout(网格布局管理器)
规则的矩阵
GardLayout(卡片布局管理器)
非规则的矩阵
2,Frame
Frame基本界面步骤。代码如下:
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; /* * 创建图形化界面 * 1,对窗体进行基本设置 * 2,对窗体进行基本设置 * 比如大小,位置,布局 * 3,定义组件 * 4,将组件通过窗体的add方法添加到窗体中。 * 5,让窗体显示,通过setVisible(true)完成 */ public class Test1 { 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.setVisible(true);// 设置可见的 // System.out.println("Hello world"); } }
3,事件监听机制
事件源(组件)
事件(Event)
监听器 (Lisener)
事件处理(引发事件处理方式)
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /* * 事件监听机制的特点: * 1,事件源 * 2,事件 * 3,监听器 * 4,事件处理 * 事件源:就是awt包中或者swing包中的那些图形界面组件 * 事件:每一个事件源都有自己特有的对应事件和共性事件 * 监听器:将可以触发某一个事件的动作都已经封装了监听器中。 * 以上三者:在java中都已经定义好了。 * 直接获取其对象来用就可以了。 * 我们要做的事情是,就是对产生的动作进行处理。 */ public class Test2 { 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.setVisible(true);// 设置可见的 f.addWindowListener(new MyWin());// 添加监听器,监听器里面定义的都是动作 // 匿名内部类的方法如下 /* * f.addWindowListener(new WindowAdapter(){ public void * windowClosing(WindowEvent e){ System.out.println("关闭"); * System.exit(0); } * * }); */ // System.out.println("Hello world"); // WindowAdapter 实现了WindowListener接口 } } /* * //覆盖了7个方法。可是我只用到了关闭动作 //其他动作却必须重写 class MyWin implements WindowListener{ * * @Override public void windowActivated(WindowEvent e) { // TODO Auto-generated * method stub * * } * * @Override public void windowClosed(WindowEvent e) { // TODO Auto-generated * method stub * * } * * @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated * method stub * * } * * @Override public void windowDeactivated(WindowEvent e) { // TODO * Auto-generated method stub * * } * * @Override public void windowDeiconified(WindowEvent e) { // TODO * Auto-generated method stub * * } * * @Override public void windowIconified(WindowEvent e) { // TODO Auto-generated * method stub * * } * * @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated * method stub * * } } */ // 因为WindowListener子类已经实现了WindwoListerer接口 // 并覆盖了其中所有的方法,那么我只要继承自Windowadapter覆盖我需要的方法即可 class MyWin extends WindowAdapter { public void windowClosing(WindowEvent e) { System.out.println("关闭"); System.exit(0); } }
4 Action事件
组件活动时触发 代码如下:
import java.awt.*; import java.awt.event.*; public class Test3 { // 初始化 Frame f = null; Button but = null; public Test3() { init(); } public void init() { f = new Frame("my Frame"); f.setBounds(300, 100, 600, 500);// 相当于setsize();setlocation();坐标和宽度高度 f.setLayout(new FlowLayout()); but = new Button("my button"); // 价值窗体事件 myEvent(); f.add(but); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); // 让按钮具备退出程序功能 /* * 按钮就是事件源 那么选择那个监听器呢? 通过关闭窗体了解到,想要知道那个组件具备什么样的特有监听器 需要查看该组件对象的功能 * (具体的组件支持哪些监听,只有组件自己知道,添加监听的方法肯定定义在组件自己内部) */ but.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {// 添加活动监听,所以参数是活动事件 // TODO Auto-generated method stub System.out.println("退出按钮做的事"); System.exit(0); } });// 由于接口方法只有一个,所以不需要适配器,方法超过三个的几乎有适配器 } public static void main(String[] args) { new Test3(); } }
5 鼠标事件
在任何组件上都可以发生鼠标事件,入:鼠标进入组件,退出组件,在组件上方单机鼠标,
拖动鼠标都发生鼠标事件,也就是说,组件可以成为发生鼠标事件的事件源
事件类型是MouseEvent,即当发生鼠标事件时,MouseEvent类自动创建一个事件对象。
MouseEvent类中有几个重要的方法。
1,getX();事件源的x坐标
2,getY();事件源的y坐标
3,getModifiers()获取鼠标的左键或右键。鼠标的左键和右键分别使用InputEvent类中的常量BUTTONI_MASK和BUTTON3来表示
4,getClickCount()获取鼠标被单机的次数
import java.awt.*; import java.awt.event.*; /* * 演示鼠标事件 */ public class Test4 { // 初始化 Frame f = null; Button but = null; public Test4() { init(); } public void init() { f = new Frame("my Frame"); f.setBounds(300, 100, 600, 500); f.setLayout(new FlowLayout()); but = new Button("my button"); // 价值窗体事件 myEvent(); f.add(but); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); but.addMouseListener(new MouseAdapter() { private int count = 1; private int clickcount = 1; public void mouseEntered(MouseEvent e) { System.out.println("鼠标进入到该组件" + count++); } public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) System.out.println("双击动作!" + clickcount++); } }); } public static void main(String[] args) { new Test4(); } }
6 键盘事件,文本框只能输入数字,组合键
在java事件模式中,必需有发生事件的事件源. 当一个组件处于激活状态时.敲击任何一个键,就会发生键盘事件.
具体的看代码示例 如下:
import java.awt.*; import java.awt.event.*; /* * 演示鼠标事件 */ public class Test5 { // 初始化 Frame f = null; Button but = null; TextField tf = null; public Test5() { init(); } public void init() { f = new Frame("my Frame"); f.setBounds(300, 100, 600, 500); f.setLayout(new FlowLayout()); tf = new TextField(20);// 指定列数初始化,要求只能输入数字 but = new Button("my button"); // 价值窗体事件 myEvent(); f.add(tf); f.add(but); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); // 给but添加一个键盘事件 but.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {// 按下ctrl加上enter键组合键 System.out.println("ctrl enter is run"); } if (e.getKeyCode() == KeyEvent.VK_ENTER) {// 按下enter键退出 System.exit(0); } System.out.println(KeyEvent.getKeyText(e.getKeyCode()) + ".." + e.getKeyCode()); } }); tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { int code = e.getKeyCode(); if (!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9)) { System.out.println(code + "是非法的"); e.consume();// 不准备用默认的方式处理事件,默认是输入进去 } } }); } public static void main(String[] args) { new Test5(); } }
7 Dialog 列出指定目录的内容,不存在的显示 示例
Dialog类和Frame类都是window的子类。对话框必须依赖于某个窗口或组件,当它所依赖的窗口或组件消失时,对话框也消失;当它所依赖的窗口或组件可见时,对话框会自动恢复。
主要方法
Dialog(Frame f,String s):构造一个具有标题s的初始化不可见的对话框,所依赖的窗口。
Dialog(Frame f,String s,boolean b):构造一个具有标题s的初始化不可见的对话框所依赖的窗口,b决定对话框是有模式或无模式。
getTitle();获取对话框标题
setTitle();设置对话框的标题
setModel(boolean b)设置对话框的模式
setSize();设置对话框的大小
setVisible(boolean b)
对话框的模式
有模式对话框:对话框牌激活状态,只让程序响应对话框内部的事件,程序不能再激活它所依赖的窗口或组件,并堵塞其他线程的执行。
无模式对话框处于非激活状态,程序仍能激活它所依赖的窗口或组件,它也不堵塞线程的执行
import java.awt.*; import java.awt.event.*; import java.io.File; /* * 列出指定目录的内容 */ public class Test6 { private Frame f; private TextField tf; private Button btn; private TextArea ta; private Dialog d; private Label lbl; private Button okbtn; public Test6() { init(); } public void init() { f = new Frame("my window"); f.setBounds(300, 100, 600, 600); f.setLayout(new FlowLayout()); tf = new TextField(30); btn = new Button("转到"); ta = new TextArea(15, 40); d = new Dialog(f, "提示信息——自己的self", true);// true代表如果不操作对话框,模式操作不了 d.setBounds(400, 200, 200, 100); d.setLayout(new FlowLayout()); lbl = new Label(); okbtn = new Button("确定"); d.add(lbl); d.add(okbtn); f.add(tf); f.add(btn); f.add(ta); myEvent(); f.setVisible(true); } public void myEvent() { tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { show(); } } }); okbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub d.setVisible(false); } }); d.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { d.setVisible(false); } }); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub show(); } }); } public static void main(String[] args) { new Test6(); } private void show() { String path = tf.getText(); File dir = new File(path); if (dir.isDirectory() && dir.exists()) { String[] names = dir.list(); ta.setText(""); for (String name : names) { ta.append(name + "\r\n"); } tf.setText(""); } else { String info = "您输入的信息:" + path + "是错误的的"; lbl.setText(info); d.setVisible(true); } } }
8,MenuBar,包含子菜单选项
菜单是窗口中常见的界面,是由
菜单项 (MenuBar) 菜单(Menu) 菜单项(MenuItem) 复选菜单项(CheckboxMenuItem)等对象组成
MenuBar 就是负责创建菜单条的,即MenuBar的一个实例就是一个菜单项。MenuBar bar=new MenuBar();
Frame类有一个将菜单条放置到窗口中的方法,其一般格式为:setMenuBar(MenuBar menubar);,只能向窗口添加一个菜单条
Menu()建立一个空标题的菜单
Menu(String s)建立一个指定标题菜单,由参数s确定
若要创建菜单Menu,并添加到空菜单条对象bar中,可执行:Menu m1=nw Menu("file"); bar.add(m1);
MenuItem 类负责为菜单创建菜单项,或为每个菜单项创建其包含的更小的菜单子项MenuItem,并把菜单子项添加到菜单项中。
MenuItem open=new MenuItem("open"); m1.add(open);
import java.awt.*; import java.awt.event.*; public class Test7 { private Frame f; private MenuBar mb; private Menu m, subMenu; private MenuItem coloseItem, subItem; public Test7() { init(); }; public void init() { f = new Frame("my window"); f.setBounds(300, 100, 500, 600); f.setLayout(new FlowLayout()); mb = new MenuBar(); m = new Menu("文件"); subMenu = new Menu("子菜单 "); subItem = new MenuItem("子条目"); coloseItem = new MenuItem("退出"); subMenu.add(subItem); m.add(subMenu); m.add(coloseItem); mb.add(m); f.setMenuBar(mb); myEvent(); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new Test7(); } }
9,FileDialog一个简单的保存文件读取文件的文本编辑器。
是Dialog的子类
FileDialog(Dialog parent,String title, int mode)
zh_cn |
如果
mode的值为
LOAD,那么文件对话框将查找要读取的文件,所显示的文件是当前目录中的文件。如果
mode的值为
SAVE,则文件对话框将查找要写入文件的位置。
parent |
| |
title |
null值时不会抛出 NullPointerException | |
mode |
FileDialog.LOAD或 FileDialog.SAVE |
import java.awt.*; import java.awt.event.*; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Test8 { private Frame f; private MenuBar mb; private Menu fileMenu; private MenuItem openItem, saveItem, closeItem; private FileDialog openDia, saveDia; private TextArea ta; private File file; public Test8() { init(); } public void init() { f = new Frame("my window"); f.setBounds(300, 100, 500, 600); mb = new MenuBar(); fileMenu = new Menu("文件"); openItem = new MenuItem("打开"); saveItem = new MenuItem("保存"); closeItem = new MenuItem("退出"); ta = new TextArea(); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(closeItem); mb.add(fileMenu); f.setMenuBar(mb); f.add(ta); openDia = new FileDialog(f, "我要打开", FileDialog.LOAD); saveDia = new FileDialog(f, "我要保存", FileDialog.SAVE); myEvent(); f.setVisible(true); } private void myEvent() { saveItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (file == null) { saveDia.setVisible(true); String path = saveDia.getDirectory();// 得到文件夹 String name = saveDia.getFile(); // 得到文件名字 if (path == null || name == null) { return; } file = new File(path, name); } try { BufferedWriter bufw = new BufferedWriter(new FileWriter( file)); String text = ta.getText(); bufw.write(text); bufw.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); openItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub openDia.setVisible(true); String path = openDia.getDirectory();// 得到文件夹 String name = openDia.getFile(); // 得到文件名字 // System.out.println(path+"..."+name); if (path == null || name == null) { return; } file = new File(path, name); ta.setText(""); try { BufferedReader br = new BufferedReader(new FileReader(file)); String text = ta.getText(); String line = null; try { while ((line = br.readLine()) != null) { ta.append(line + "\r\n"); } br.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); } public static void main(String[] args) { new Test8(); } }
相关文章推荐
- 黑马程序员_Java图形用户界面GUI
- 黑马程序员—图形用户界面GUI
- 黑马程序员——GUI(图形用户界面)
- 黑马程序员--java技术--GUI图形用户界面
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-3
- 黑马程序员,Java基础知识九:GUI图形用户界面
- 黑马程序员_温习 GUI图形用户接口一 (个人笔记)摘要(GUI图形用户界面介绍-----布局管理器-----事件监听机制-----窗体事件---Action(执行事件)----鼠标事件----键
- 黑马程序员 Java基础<十一>---> GUI(图形用户界面)
- 黑马程序员—java基础学习--GUI( 图形用户界面 )
- 黑马程序员_图形用户界面GUI
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-5
- 黑马程序员 图形用户界面GUI
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-4
- 黑马程序员——GUI(图形用户界面)中的AWT
- 黑马程序员——GUI(图形用户界面)
- 黑马程序员-图形用户界面GUI -22天(1)
- 黑马程序员----------GUI 图形用户界面
- 黑马程序员--图形用户界面GUI
- 黑马程序员-java基础(八)-图形用户界面GUI
- 黑马程序员——【Java基础】——GUI(图形用户界面)