黑马程序员-Java基础-GUI编程

---------------------- 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/70898746 【完整课程列表】 完整版 Java基础入门教程 Java程序语言设计 01 java语言基础 Java语言概述(共24页).ppt 完整版 Java基础入门教程 Java程序语言设计 02 java语法基础 Java语法基础(共32页).ppt 完整版 Java基础入门教程 Java程序语言设计 02 java语法基础 Java语法基础2(共24页).ppt 完整版 Java基础入门教程 Java程序语言设计 03 java对象 集合框架(共18页).ppt 完整版 Java基础入门教程 Java程序语言设计 03 java对象 类和对象1(共23页).ppt 完整版 Java基础入门教程 Java程序语言设计 03 java对象 类与对象2(共23页).ppt 完整版 Java基础入门教程 Java程序语言设计 03 java对象 类与对象3(共24页).ppt 完整版 Java基础入门教程 Java程序语言设计 03 java对象 类与对象4(共35页).ppt 完整版 Java基础入门教程 Java程序语言设计 04 IO流 输入输出流(共31页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI AWT 事件模型(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI GUI 编程(共37页).ppt 完整版 Java基础入门教程 Java程序语言设计 05 GUI Swing(共41页).ppt 完整版 Java基础入门教程 Java程序语言设计 06 异常处理 异常和垃圾收集(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 网络编程 JDBC(共21页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 网络编程 反射机制(共23页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 网络编程 网络编程(共32页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 网络编程 线程(共23页).ppt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值