黑马程序员——javaGUI编程
2013-12-29 15:20
232 查看
[align=center]---------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! -----------[/align]
对象都在java.awt(abstract windows ToolKit首相窗口工具包),需要调用本地系统方法实现功能(依赖平台,造成观感不同),属于重量级。
Javax.swing:在Awt基础上,建立了一套图形化界面系统,提供了更多组建,而且完全有java实现,增强了移植性,属于轻量级。
CLI (command line User Interface)用户命令行接口
FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中
Frame默认的布局管理器。
GridLayout(网格布局管理器)
规则的矩阵
CardLayout(卡片布局管理器)
选项卡
GridBagLayout(网格包布局管理器)
非规则的矩阵
坐标式布局?没用过,查找。用开发工具的扩展包,用画布更方便类似于VB的开发。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。
按钮就是事件源。
那么选择哪个监听器呢?
通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。
需要查看该组件对象的功能。
通过查阅button的描述。发现按钮支持一个特有监听addActionListener。
因为其接口的方法只有一个所以不需要适配器(adapter)(适配器的目的是为了,实现接口中的方法,让适配器的子类覆盖需要的时间就行,而不用覆盖全部),一般当时间超过三个时,就会设计适配器。
常见的侦听器:
|——java.util EventListener
|——java.awt.event ActionListener(一个)
|——java.awt.event ContainerListener(两个方法)
|——java.awt.event KeyListener(有 KeyAdapter 类)
|——java.awt.event MouseListener(有MouseAdapter 类)
|——java.awt.event TextListener(一个方法)
|——java.awt.event WindowListener(有WindowAdapter类)
它对应的是MouseListener。
鼠标单击次数是定义在MouseEvent事件对象中的,在MouseEvent事件对象中还能还封装了触发事件的是鼠标的一些相关信息。
MouseListener有对应的MouseAdapter。
这些信息可以通过该对象对外提供的方法获取到。
keyEvent 对应的事件监听器的KeyListener?,有对应的KeyAdapter。
Dialog在构造时,可以设置模式,如果为true那么,在该对话框关闭前,程序的其他窗口都不能被操作。
其体系如下:
|----Dialog
|----FileDialog文件对话框,可以从中选择文件。
|----JDialog
模拟打开文件系统,从下边的代码可以看出,其实只要图形化做出来,添加事件的处理办法都平时学的就一样了,知识调用了一下方法。
代码:
9、菜单
主要由三个类组成:MenuBar,Menu和MenuItem。
MenuBar:菜单条,里边只能添加Menu。
Menu:可以添加MenuItem菜单条目,如果这个MenuItem是一个Menu,那么这个Menu是一个子菜单。
MenuItem:菜单条目。
注意:其继承体系如下:
|---MenuComponent
|---- MenuBar
|---- MenuItem
|-----Menu
练习代码:简单模拟记事本
步骤三:进入HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command,修改默认的键值为 "D:\Program Files\Java\jre\bin\javaw.exe" -jar "%1"
GUI编程
1、GUI的概述:
Graphical user Interface(图形化接口)对象都在java.awt(abstract windows ToolKit首相窗口工具包),需要调用本地系统方法实现功能(依赖平台,造成观感不同),属于重量级。
Javax.swing:在Awt基础上,建立了一套图形化界面系统,提供了更多组建,而且完全有java实现,增强了移植性,属于轻量级。
CLI (command line User Interface)用户命令行接口
2、继承关系图
3、容器中的组件的排放方式,就是布局。
常见的布局管理器:FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中
Frame默认的布局管理器。
GridLayout(网格布局管理器)
规则的矩阵
CardLayout(卡片布局管理器)
选项卡
GridBagLayout(网格包布局管理器)
非规则的矩阵
坐标式布局?没用过,查找。用开发工具的扩展包,用画布更方便类似于VB的开发。
4、创建图形化界面:
1,创建frame窗体。
2,对窗体进行基本设置。
比如大小,位置,布局。3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
5,让窗体显示,通过setVisible(true)
5、事件监听机制的特点:
1,事件源。
2,事件。
3,监听器。
4,事件处理。
事件源:就是awt包或者swing包中的那些图形界面组件。事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。
6、让按钮具备退出程序的功能
/*按钮就是事件源。
那么选择哪个监听器呢?
通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。
需要查看该组件对象的功能。
通过查阅button的描述。发现按钮支持一个特有监听addActionListener。
因为其接口的方法只有一个所以不需要适配器(adapter)(适配器的目的是为了,实现接口中的方法,让适配器的子类覆盖需要的时间就行,而不用覆盖全部),一般当时间超过三个时,就会设计适配器。
常见的侦听器:
|——java.util EventListener
|——java.awt.event ActionListener(一个)
|——java.awt.event ContainerListener(两个方法)
|——java.awt.event KeyListener(有 KeyAdapter 类)
|——java.awt.event MouseListener(有MouseAdapter 类)
|——java.awt.event TextListener(一个方法)
|——java.awt.event WindowListener(有WindowAdapter类)
示例代码
import java.awt.*; import java.awt.event.*; class FrameDemo { //定义该图形中所需的组件的引用。 private Frame f; private Button but; FrameDemo() { //这是一种良好的编程,否则构造函数看起来一团糟 init(); } //初始化图形界面 public void init()//初始化 { f= new Frame("day22-MyFrame"); //对frame进行基本设置。 f.setBounds(300,100,600,500); //直接设置位置、大小 f.setLayout(new FlowLayout()); //流式布局 but = new Button("my button"); //将组件添加到Frame中 f.add(but); //加载一下窗体上的事件。 myEvent(); //显示窗体 f.setVisible(true); } //最好把事件处理和GUI组件的基本初始化分离开 public void myEvent()//这些都是组件的特有事件,还有共性事件。 { f.addWindowListener(new WindowAdapter() //匿名内部类、覆盖父类的close方法 { public void windowClosing(WindowEvent e) { System.out.println("关闭窗口"); System.exit(0);//这个方法的 关闭的是虚拟机,退出虚拟机,当然就退出了程序 } }); //让按钮具备退出程序的功能。 /* 按钮就是事件源,那么选择哪一个监听器呢?通过关闭窗体实例了解到。想要知道那个组件具备什么样的特与监听器, 需要查看该组件对象的功能。那么通过查阅button的描述,发现支持一个特有监听addActionListener(ActionListener l); 是没有适配器的少数组件之一,只要事件方法超过3个的组件,都有配适器(Adapter); */ but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("退出,按钮干的"); //验证用的 System.exit(0); } }); } //主函数,用于测试 public static void main(String[] args) { new FrameDemo(); } }
7、鼠标事件、键盘事件
鼠标事件
MouseEvent,它是所有组件都有的共性事件,所以它的添加监听器方法是定义在Component抽象类中,键盘事件也是共性事件。它对应的是MouseListener。
鼠标单击次数是定义在MouseEvent事件对象中的,在MouseEvent事件对象中还能还封装了触发事件的是鼠标的一些相关信息。
MouseListener有对应的MouseAdapter。
键盘事件
KeyEvent事件对象,内部封装了对应于键盘各个键的字段和触发事件的具体按键的信息。这些信息可以通过该对象对外提供的方法获取到。
keyEvent 对应的事件监听器的KeyListener?,有对应的KeyAdapter。
代码
import java.awt.*; import java.awt.event.*; class MouseAndKeyEvent { //定义该图形中所需的组件的引用。 private Frame f; private Button but; private TextField tf; MouseAndKeyEvent() { init(); } public void init()//初始化 { f= new Frame("day22-MyFrame"); //对frame进行基本设置。 f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); but = new Button("my button"); tf = new TextField(10); f.add(but); //添加组件的顺序很重要 f.add(tf); myEvent(); f.setVisible(true); } public void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //给but添加一个键盘侦听器 but.addKeyListener(new KeyAdapter() { private int count; public void keyPressed(KeyEvent e) { //判断组合键 if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER) //从父类InputEvent 找isControlDown //System.exit(0); System.out.println("Ctrl + Enter is down"); //System.out.println("按下某个键了---"+count++); //System.out.println(e.getKeyChar()); //打印按下的键上在字符串,及键值。 System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"....."+e.getKeyCode()); } }); tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //模拟QQ登陆,限定键值的范围 (0—9) int code =e.getKeyCode(); if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)) { //不处理,取消掉事件,具有屏蔽键的作用,如果键入是字符非法则不写入文本框。 e.consume();//从父类InputEvent中获取的方法consume,不按照默认的方法处理该事件。 System.out.println(code + "....是非法的"); } } }); //给but添加监听器 but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("button action"); } }); //给but添加鼠标监听器 but.addMouseListener(new MouseAdapter() { private int count; private int clickCount; public void mouseEntered(MouseEvent e) { System.out.println("鼠标进入组件区域啦--"+count++); } public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2) System.out.println("鼠标双击Button了--"+clickCount++); } }); } public static void main(String[] args) { new MouseAndKeyEvent(); } }
8、对话框
Dialog在构造时,可以设置模式,如果为true那么,在该对话框关闭前,程序的其他窗口都不能被操作。其体系如下:
|----Dialog
|----FileDialog文件对话框,可以从中选择文件。
|----JDialog
模拟打开文件系统,从下边的代码可以看出,其实只要图形化做出来,添加事件的处理办法都平时学的就一样了,知识调用了一下方法。
代码:
import java.awt.Button; import java.awt.Dialog; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.*; import java.io.File; public class MyWindowsDemo { /** * @param args */ //创建所需的组件 private Frame f; private Button but; private TextField tf ; private TextArea ta; MyWindowsDemo(){ init(); } public void init(){//初始化图形 f = new Frame("my windows"); but = new Button("转到"); tf = new TextField(55); ta = new TextArea(40,70); f.setBounds(300,400,500,500); f.setLayout(new FlowLayout(0)); f.add(tf); f.add(but); f.add(ta); myEvent();//添加事件侦听 f.setVisible(true); } private void myEvent(){ but.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ show();//调用方法 } }); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); tf.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ if(e.getKeyCode()==KeyEvent.VK_ENTER){ show(); } } }); } private void show(){ String s = tf.getText(); File dir = new File(s); if(dir.exists()&&dir.isDirectory()){ ta.setText(""); String [] file = dir.list(); for(String name:file){ ta.append(name+"\r\n"); } } else{ final Dialog dl = new Dialog(f,"error--info",true);//匿名内部类会用到所以用final修饰 Label la = new Label(); Button butok = new Button("OK"); dl.setBounds(200,150,200,200); dl.setLayout(new FlowLayout()); dl.add(la); dl.add(butok); la.setText("路径错误:"+ tf.getText()+" 请重输 "); butok.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ dl.setVisible(false); } }); dl.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); dl.setVisible(true); } } public static void main(String[] args) { // TODO Auto-generated method stub new MyWindowsDemo(); } }
9、菜单
主要由三个类组成:MenuBar,Menu和MenuItem。
MenuBar:菜单条,里边只能添加Menu。
Menu:可以添加MenuItem菜单条目,如果这个MenuItem是一个Menu,那么这个Menu是一个子菜单。
MenuItem:菜单条目。
注意:其继承体系如下:
|---MenuComponent
|---- MenuBar
|---- MenuItem
|-----Menu
练习代码:简单模拟记事本
import java.awt.*; import java.awt.event.*; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import until.cn.itcast.Print; public class MyMenuTest { /** * @param args */ private Frame f; private MenuBar bar; private TextArea ta; private Menu filemenu; private MenuItem closeMenu,openMenu,saveMenu; private FileDialog openDia; private FileDialog saveDia; private File file; MyMenuTest(){ init(); } public void init(){ f = new Frame("my menu"); f.setBounds(200,300,400,500); bar = new MenuBar(); ta = new TextArea(); f.setMenuBar(bar); filemenu = new Menu("文件"); bar.add(filemenu); closeMenu = new MenuItem("关闭"); openMenu = new MenuItem("打开"); saveMenu = new MenuItem("保存"); filemenu.add(openMenu); filemenu.add(saveMenu); filemenu.add(closeMenu); openDia = new FileDialog(f,"我要打开",FileDialog.LOAD); saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE); f.add(ta); myEvent(); f.setVisible(true); } private void myEvent(){ saveMenu.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(file == null){ openDia.setVisible(true); String dir = saveDia.getDirectory(); String name = saveDia.getFile(); if(dir==null&name==null) return; file = new File(dir,name); } try{ BufferedWriterbw = New BufferedWriter(newFileWriter(file)); String text = ta.getText(); Print.sop(text); bw.write(text); bw.close(); }catch(IOException ex){ throw new RuntimeException("保存失败"); } } }); openMenu.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ openDia.setVisible(true); String dir = openDia.getDirectory(); String name = openDia.getFile(); if(dir==null&name==null) return; ta.setText(""); file = new File(dir,name); try{ BufferedReader br= new BufferedReader(new FileReader(file)); String line = null; while((line = br.readLine())!=null){ ta.append(line+"\r\n"); } br.close(); }catch(IOException ex){ throw new RuntimeException("读取失败"); } } }); closeMenu.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) { // TODO Auto-generated method stub new MyMenuTest(); } }
补充知识:
jar包打开解决办法“
WIN7系统双击Jar文件无法运行,下面提供两种解决方法:第一种方法:
步骤一:新建一个文本文档,输入内容"javaw -jar %1 ",并保存为批处理文件,例如"run.bat "。
步骤二:右键点击.jar格式的文件 ,选择其打开方式 为上面建的run.bat 。
此时jar就能运行了....第二种方法:
第一种方法可以解决问题,但是有些不足之处,下面介绍一种更好的方法:通过修改注册表来解决该问题。步骤一:打开注册表,开始->运行(或者用快捷键WIN+R),输入regedit,确定;
步骤二:找到HKEY_CLASSES_ROOT\Applications \javaw.exe,一开始没有的话,就在资源管理器中找到javaw.exe文 件,如我的电脑中为D:\ProgramFiles\Java\jre\bin\javaw.exe,运行下,或找个Jar文件,选择打开方式,输入D:\Program Files\Java\jre\bin\javaw.exe,再选择打开就行了;
步骤三:进入HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command,修改默认的键值为 "D:\Program Files\Java\jre\bin\javaw.exe" -jar "%1"
---------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! -----------
相关文章推荐
- 黑马程序员-Java基础总结12——GUI编程
- 黑马程序员——Java—GUI编程
- 黑马程序员_java入门_GUI编程
- 黑马程序员_java GUI编程
- 黑马程序员---基础强化---java1.5新特性
- 黑马程序员——java集合之斗地主和升级的集合运用总结
- 黑马程序员-JavaBean
- 黑马程序员_基础加强之JavaBean
- 黑马程序员——Java基础---集合(Collection接口、List接口及其子类、增强for)
- 黑马程序员_Java 类中各成分加载顺序 和 内存中的存放位置
- 黑马程序员--Java中的反射逻辑
- 黑马程序员——Java基础---集合(Set接口及其子类、Map接口及其子类)
- 黑马程序员——Java笔记——StringBuffer类常用方法
- 黑马程序员_java基础之五
- 黑马程序员——Java基础---继承、抽象、接口
- 黑马程序员——java基础之面向对象
- 黑马程序员_java网络编程
- 黑马程序员 java中的多线程
- 黑马程序员——Java学习笔记之13——“反射”总结
- 黑马程序员---Java基础--16天(集合之一)