黑马程序员——GUI

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

GUI介绍

GUI :

Graphical User Interface(图形用户接口):用图形的方式,来显示计算机操作的界面,这样更方编直观。

CLI:

Command line User Interfac(命令行用户接口):最常见的Dos命令行操作。需要记忆一些常用的命令,操作不直观。

Java为GUI提供的对象都存在java.awt和javax.swing两个包中。

Awt和Swing区别:

java.awt: AbstractWindow ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。

javax.swing : 在awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件,对系统依赖性相对少了很多。

简单的说:awt在不同的操作系统上界面有细微差别,而swing可以在不同系统上统一。

Container常用子类:Window   Panel(面板,不能单独存在)

Window常用子类:Frame  Dialog


布局管理器

容器中的组件的排放方式就是布局。

常见布局管理器

FlowLayout    流式布局      从左到右  Panel默认的布局管理器

BorderLayout 边界布局      东南西北中 Frame默认的布局管理器

GridLayout    网格布局      规矩的矩阵

CardLayout    卡片布局      选项卡

GridBagLayout 网格包布局    非规则的矩阵

创建图形化界面步骤:

1、创建frame窗体

2、对窗体进行基本设置

              比如大小,位置,布局

3、定义组件

4、将组件通过窗体的add方法添加到窗体中

5、让窗体显示,通过setVisible(true)

import java.awt.*;
import java.awt.event.*;

class AwtDemo {
	public static void main(String[] args) {
		Frame f = new Frame("my awt");// 创建一个最初不可见的、具有标题的Frame对象
		f.setBounds(300, 200, 500, 400);// 设置坐标 窗体大小
		/*
		 * f.setSize(500,400);//设置窗体大小 (横,纵) f.setLocation(300,200);//顶点距离左上角位置
		 */
		f.setLayout(new FlowLayout());// setLayout设置布局管理

		Button but = new Button("按钮");// 设置按钮

		f.add(but);// 添加按钮

		/*
		 * 因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。
		 * 并覆盖了其中的所有方法。那么只要继承自Windowadapter覆盖需要的方法即可。
		 */
		f.addWindowListener(new WindowAdapter()// 匿名内部类
		{
			public void windowClosing(WindowEvent e)// 关闭窗口
			{
				System.out.println("我关");
				System.exit(0);
			}
			/*
			 * public voidwindowActivated(WindowEvent e) //窗口激活 {
			 * System.out.println("我活了。"); }
			 * 
			 * public voidwindowOpened(WindowEvent e) {
			 * System.out.println("我被打开了,hahahhahah"); }
			 */
		});

		f.setVisible(true);// 使窗体可见
	}
}


事件监听机制

特点:

1、事件源:awt包或者swing包中的那些图形界面组件

2、事件:每一个事件源都有自己特有的对应事件和共性事件

3、监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中

4、事件处理:引发事件后的处理方法

其中事件源、事件、监听器在java中都定义好了,直接获取其对象来用就可以了。

事件处理一般步骤步骤:

1、确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器注册到该事件源上,该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

2、用匿名内部类来表示,在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

3、事件触发后把事件打包成对象传递给该变量。(包括事件源对象,通过getSource()或者getComponent()获取)

需求:让按钮具备退出程序的功能

<span style="white-space:pre">		</span>but.addActionListener(new ActionListener() {
			private int count = 1;

			public void actionPerformed(ActionEvent e) {
				Button b = (Button) e.getSource();
				Frame f1 = (Frame) b.getParent();
				f1.add(new Button("button-" + count++));
				f1.validate();
			}
		});

需求:鼠标进入事件

</pre><pre name="code" class="java"><span style="white-space:pre">		</span>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++);
			}
		});

需求:添加文本框,在文本框中输入0-9数字,输入其他字符返回非法字符

<span style="white-space:pre">		</span>Frame f1 = new Frame("my frame");
		f1.setLayout(new FlowLayout());
		TextField tf = new TextField(20);
		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();
				}

			}
		});

需求:模拟Windows窗口,在文本框中输入目录,点击转到按钮,将该目录中的文件与文件夹名称列在下面的文本区域中,当输入的目录有误时,给出提示对话框

import java.awt.*;
import java.awt.event.*;
import java.io.File;

class MyWindowDemo {
	private Frame f;
	private TextField tf;// 文本框
	private Button but;
	private TextArea ta;// 文本区域
	// 提示对话框三个元素
	private Dialog d;
	private Label lab;
	private Button okBut;

	MyWindowDemo() {
		init();
	}

	public void init() {
		// 文本框基本设置
		f = new Frame("my window");
		f.setBounds(300, 100, 600, 500);
		f.setLayout(new FlowLayout());
		tf = new TextField(60);

		but = new Button("转到");

		ta = new TextArea(25, 70);

		// 提示对话框设置
		d = new Dialog(f, "提示信息-self", true);// 为true的时候,如果对话框不操作,所属的窗体操作不了
		d.setBounds(400, 200, 240, 150);
		d.setLayout(new FlowLayout());
		lab = new Label();
		okBut = new Button("确定");
		d.add(lab);
		d.add(okBut);

		f.add(tf);
		f.add(but);
		f.add(ta);

		myEvent();
		f.setVisible(true);
	}

	private void myEvent() {

		okBut.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				d.setVisible(false);
			}
		});
		d.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				d.setVisible(false);
			}
		});

		tf.addKeyListener(new KeyAdapter()// 键盘输入回车符
		{
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_ENTER)
					showDir();
			}
		});

		but.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				showDir();
			}
		});

		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	private void showDir() {
		String dirPath = tf.getText();// 获取文本

		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 MyWindowDemo();
	}
}


菜单

Menu:菜单,继承MenuItem;可添加Menu和MenuItem

MenuBar:菜单栏,可添加菜单和菜单条目,一般先创建菜单栏,再创建菜单

MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项

菜单的事件处理和组件一样,可以对类型为MenuItem和Menu的对象这个事件源添加活动监听ActionListener,并进行相关的事件理。

需求:添加菜单项,通过Menu添加”文件”, MenuItem添加”退出”

import java.awt.*;
import java.awt.event.*;
class MyMenuDemo {
	private Frame f;
	private MenuBar mb;
	private Menu m, subMenu;
	private MenuItem closeItem, subItem;
	MyMenuDemo() {
		init();
	}

	public void init() {
		f = new Frame("mywindow");
		f.setBounds(300, 100, 500, 600);
		f.setLayout(new FlowLayout());

		mb = new MenuBar();
		m = new Menu("文件");
		subMenu = new Menu("子菜单");
		subItem = new MenuItem("子条目");
		closeItem = new MenuItem("退出");
		subMenu.add(subItem);

		m.add(subMenu);
		m.add(closeItem);
		mb.add(m);
		f.setMenuBar(mb);
		myEvent();

		f.setVisible(true);

	}

	private void myEvent() {

		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();
	}
}

需求:模拟简单记事本,具有打开和保存功能

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class MyMenuTest {

	private Frame f;
	private MenuBar bar;
	private TextArea ta;
	private Menu fileMenu;
	private MenuItem openItem, saveItem, closeItem;

	private FileDialog openDia, saveDia;
	private File file;

	MyMenuTest() {
		init();
	}

	public void init() {
		f = new Frame("mywindow");
		f.setBounds(300, 100, 650, 600);

		bar = new MenuBar();
		ta = new TextArea();
		fileMenu = new Menu("文件");

		openItem = new MenuItem("打开");
		saveItem = new MenuItem("保存");
		closeItem = new MenuItem("退出");

		fileMenu.add(openItem);
		fileMenu.add(saveItem);
		fileMenu.add(closeItem);
		bar.add(fileMenu);

		f.setMenuBar(bar);

		openDia = new FileDialog(f, "我要打开", FileDialog.LOAD);
		saveDia = new FileDialog(f, "我要保存", FileDialog.SAVE);

		f.add(ta);
		myEvent();

		f.setVisible(true);

	}

	private void myEvent() {

		saveItem.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				if (file == null)// 当文件不存在的时候,在保存的时候要给文件命名
				{
					saveDia.setVisible(true);

					String dirPath = saveDia.getDirectory();
					String fileName = saveDia.getFile();
					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 ex) {
					throw new RuntimeException();
				}

			}
		});

		openItem.addActionListener(new ActionListener() {
			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 = 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 ex) {
					throw new RuntimeException("读取失败");
				}

			}
		});

		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 MyMenuTest();
	}
}


 Jar双击执行包

制作可以双击执行的jar包步骤:

1、将多个类封装到了一个包(package)中

2、定义一个jar包的配置信息

  定义一个文件a.txt ,文件内容内容为:Main-Class:(空格)包名.类名(回车)

3、打jar包

  jar -cvfm my.jar a.txt 包名

4、通过winrar程序进行验证,查看该jar的配置文件中是否有自定义的配置信息

5、通过工具--文件夹选项--文件类型--jar类型文件,通过高级,定义该jar类型文件的打开动作的关联程序

  jdk\bin\javaw.exe -jar

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值