黑马程序员-Java基础-GUI编程
2013-12-03 09:52
489 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
* GUI(Graphical user interface)图形用户接口
* CLI(command line user interface)命令行用户接口,也就是常见的DOS命令行
GUI的组件对象都在Java.awt和javax.swing包。
l早期的java提供的GUI类库(java.awt)称之为Abstract Window Toolkit,即AWT,
AWT功能不是很好,不能很好的访问操作系统中高级的GUI特性,生成的程序外观很一般。
lSwing是JDK1.2以后提供的GUI类库,即:javax.swing,使用方便,界面更加美观。它提供的组件会在前面加上J以示区分,如Jframe.
GUI体系结构
* component
* |--container |--button label checkbox
* |--window |--panel |-- textCompenent
* |--f rame |--dialog |-- TextArea |--TextField
* |--fileDialog
component是构件,位于最顶层。
container是容器,可以通过add()方法添加其他组件进来。用于放置其他组件,如:Frame,JFrame,Applet;
布局管理器负责安排GUI组件的位置,java中布局管理器提供以下几种布局功能:
lFlowLayout:从左到右的次序放置组件;panel默认的布局
lBorderLayout:将容器的分成东、西、南、北、中5个区域;frame默认布局
lGridLayout:按行和列排列;
lBoxLayout:从左到右或从上到下放置组件;
lCardLayout:将组件重叠堆放;
GridBagLayout:与GridLayout类似,但组件的次序可变,并且能以任何次序添放组件.
* 创建图形化界面:
* 1、创建f窗体
* 2、对窗体进行基本设置
* 比如大小,位置,布局
* 3、定义组件
* 4、将组件通过窗体的add()方法添加到窗体中
* 5、让窗体显示,通过setViserble(true)
* 事件监听机制的特点:
* 1、事件源:就是awt或Swing包中的图形界面组件
* 2、事件:每一个事件源都有自己特有的对应事件和共性事件
* 3、监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中。
* 4、事件处理
* 前三者在Java中已经定义好了,直接获取其对象来用就可以。
* 我们要做的事情,就是对产生的动作进行处理。
GUI 体系结构图如下:
awt包中组件结构和swing包中结构如下:
1、鼠标键盘监听事件代码演示:
2、输入框中输入盘符或文件地址,在下方文本域显示目录文件简单窗口演示,图如下:
代码如下:
3、简单记事本程序演示:它具有打开文件,保存文件,如果是已经存在的文件,保存时不会弹出保存对话框。图片如下:
代码如下:
---------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
* GUI(Graphical user interface)图形用户接口
* CLI(command line user interface)命令行用户接口,也就是常见的DOS命令行
GUI的组件对象都在Java.awt和javax.swing包。
l早期的java提供的GUI类库(java.awt)称之为Abstract Window Toolkit,即AWT,
AWT功能不是很好,不能很好的访问操作系统中高级的GUI特性,生成的程序外观很一般。
lSwing是JDK1.2以后提供的GUI类库,即:javax.swing,使用方便,界面更加美观。它提供的组件会在前面加上J以示区分,如Jframe.
GUI体系结构
* component
* |--container |--button label checkbox
* |--window |--panel |-- textCompenent
* |--f rame |--dialog |-- TextArea |--TextField
* |--fileDialog
component是构件,位于最顶层。
container是容器,可以通过add()方法添加其他组件进来。用于放置其他组件,如:Frame,JFrame,Applet;
布局管理器负责安排GUI组件的位置,java中布局管理器提供以下几种布局功能:
lFlowLayout:从左到右的次序放置组件;panel默认的布局
lBorderLayout:将容器的分成东、西、南、北、中5个区域;frame默认布局
lGridLayout:按行和列排列;
lBoxLayout:从左到右或从上到下放置组件;
lCardLayout:将组件重叠堆放;
GridBagLayout:与GridLayout类似,但组件的次序可变,并且能以任何次序添放组件.
* 创建图形化界面:
* 1、创建f窗体
* 2、对窗体进行基本设置
* 比如大小,位置,布局
* 3、定义组件
* 4、将组件通过窗体的add()方法添加到窗体中
* 5、让窗体显示,通过setViserble(true)
* 事件监听机制的特点:
* 1、事件源:就是awt或Swing包中的图形界面组件
* 2、事件:每一个事件源都有自己特有的对应事件和共性事件
* 3、监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中。
* 4、事件处理
* 前三者在Java中已经定义好了,直接获取其对象来用就可以。
* 我们要做的事情,就是对产生的动作进行处理。
GUI 体系结构图如下:
awt包中组件结构和swing包中结构如下:
1、鼠标键盘监听事件代码演示:
package com.itheima.day22; import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MouseAndKeyEvent { private Frame f; private Button but; private TextField tf; MouseAndKeyEvent() { init(); } public void init() { f = new Frame("my Frame"); f.setBounds(300, 300, 500, 400);//设置组件,并调整其大小。距左边,距右边(设置位置),宽,高(设置大小) f.setLayout(new FlowLayout());//设置窗口布局为流式布局 but = new Button("my button"); tf = new TextField(20);//创建文本域 f.add(tf);//将文本域添加进窗体中 f.add(but);//将按钮添加进窗体中 f.setVisible(true);//设置窗口可见 myEvent();//加载监听事件 } public void myEvent() { //窗口事件 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //活动事件 but.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Action ok "); } }); //鼠标事件 but.addMouseListener(new MouseAdapter() { private int count=0; private int clickcount=0; public void mouseEntered(MouseEvent e) { //System.out.println("鼠标进入事件"+count++); } public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2) System.out.println("双击事件"+clickcount++); System.out.println("鼠标单击"+clickcount++); } }); //键盘事件 but.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ESCAPE) System.exit(0); /* if(e.isControlDown()&& e.getKeyCode()==KeyEvent.VK_ENTER) { //isControlDown()是inputEnvent(KeyEnvent的父类)中的方法 System.out.println("ctrl+enter is run "); }*/ //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 MouseAndKeyEvent(); } }
2、输入框中输入盘符或文件地址,在下方文本域显示目录文件简单窗口演示,图如下:
代码如下:
package com.itheima.day22; 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.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; public class MyWindowTest { private Frame f; private TextField tf; private Button but; private TextArea ta; private Dialog d; private Label lab; private Button dbut; MyWindowTest() { init(); } public void init() { f = new Frame("my Frame"); f.setBounds(300, 300, 500, 400); f.setLayout(new FlowLayout()); tf = new TextField(30); but = new Button("转到"); ta = new TextArea(15,40);//行,列 d = new Dialog(f,"提示信息",true); lab = new Label(); dbut = new Button("确认"); d.setBounds(200, 200, 300, 200); d.setLayout(new FlowLayout()); d.add(lab); d.add(dbut); f.add(tf); f.add(but); f.add(ta); f.setVisible(true); myEvent(); } public void myEvent() { //窗口事件 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); d.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { d.setVisible(false); } }); //活动事件 but.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showDir(); } }); dbut.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showDir(); d.setVisible(false); } }); tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { int code = e.getKeyCode(); if(code==KeyEvent.VK_ENTER) { showDir(); } } }); } private void showDir() { String dirPath = tf.getText();//TextField父类中的方法 File dir = new File(dirPath); if(dir.exists() && dir.isDirectory()) { ta.setText(""); String[] names = dir.list(); for(String name : names) { ta.append(name+"\r\n");//追加文本 } } else { String info ="您输入的信息: "+dirPath+" 有误,请重新输入"; lab.setText(info); d.setVisible(true); } } public static void main(String[] args) { new MyWindowTest(); } }
3、简单记事本程序演示:它具有打开文件,保存文件,如果是已经存在的文件,保存时不会弹出保存对话框。图片如下:
代码如下:
package com.itheima.day22; import java.awt.FileDialog; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class MyMenuTest { private Frame f; private MenuBar mb; private Menu m,submenu; private MenuItem subItem; private MenuItem openItem,saveItem,closeItem; private FileDialog opendia,savedia; private TextArea ta; private File file; MyMenuTest() { init(); } public void init() { f = new Frame("my Frame"); f.setBounds(300, 300, 800, 500); //f.setLayout(new FlowLayout());如果不写布局就会默认边界布局,文本域全部填充 mb = new MenuBar(); m = new Menu("文件"); submenu = new Menu("子菜单"); subItem = new MenuItem("子条目"); openItem = new MenuItem("打开"); saveItem = new MenuItem("保存"); closeItem = new MenuItem("退出"); ta = new TextArea(); opendia = new FileDialog(f,"打开文件",FileDialog.LOAD); savedia = new FileDialog(f,"保存文件",FileDialog.SAVE); m.add(submenu); submenu.add(subItem); m.add(openItem); m.add(saveItem); m.add(closeItem); mb.add(m); f.setMenuBar(mb); f.add(ta); f.setVisible(true); myEvent(); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //打开目录事件 openItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { opendia.setVisible(true); String dirPath = opendia.getDirectory(); String filename = opendia.getFile(); System.out.println(dirPath+"--"+filename); if(dirPath == null || filename == null) return ; ta.setText("");//当选择有效文件时,清空之前的内容 File file = new File(dirPath,filename); try { BufferedReader bufr = new BufferedReader(new FileReader(file)); String line = null; while((line=bufr.readLine())!=null) { ta.append(line+"\r\n"); } bufr.close(); } catch (IOException e1) { throw new RuntimeException("读取失败"); } } }); //保存目录事件 saveItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(file==null) { savedia.setVisible(true); String dirPath = savedia.getDirectory(); String filename = savedia.getFile(); System.out.println(dirPath+"--"+filename); if(dirPath == null || filename == null) return ; file = new File(dirPath,filename); } try { BufferedWriter bufw = new BufferedWriter(new FileWriter(file)); String text = ta.getText(); bufw.write(text); bufw.flush(); bufw.close(); } catch (IOException e1) { throw new RuntimeException("保存文件失败"); } } }); closeItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MyMenuTest(); } }
---------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
相关文章推荐
- 黑马程序员——Java基础——GUI图形界面编程
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员—java基础—GUI图形用户界面编程
- 黑马程序员—JAVA基础—GUI(图形化界面编程)
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员----java的GUI图形用户界面及编程基础
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员--GUI界面编程--java学习日记9(基础知识)
- 黑马程序员 java基础24天 GUI编程学习总结
- 黑马程序员——高新技术---Java基础-GUI编程
- 黑马程序员--Java基础--GUI、网络编程
- 黑马程序员----JAVA基础之GUI可视化编程与枚举&网络编程
- 黑马程序员——Java基础---GUI,网络编程
- 黑马程序员——Java基础----网络编程
- 黑马程序员Java培训和Android培训:编程基础
- 黑马程序员_Java基础_GUI_22
- Java GUI用户界面编程的基础
- 黑马程序员 JAVA基础之网络编程笔记
- 黑马程序员_java基础11-GUI
- 黑马程序员__JAVA基础__GUI(图形用户界面)