【黑马程序员】Java基础10:GUI窗体实例

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------


一、GUI概述

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

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中

 

Component 类的继承关系图:

     


常用类介绍:

1component是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例Component 类是与菜单不相关的 Abstract Window Toolkit 组件的抽象超类

2Window对象是一个没有边界和菜单栏的顶层窗口,窗口的默认布局是 BorderLayout

3Frame是带有标题和边框的顶层窗口,窗体的默认布局为 BorderLayout

4Dialog是一个带标题和边界的顶层窗口,边界一般用于从用户处获得某种形式的输入;

5FileDialog类显示一个对话框窗口,用户可以从中选择文件;

6Button此类创建一个标签按钮,当按下该按钮时,应用程序能执行某项动作;

7Label对象是一个可在容器中放置文本的组件,一个标签只显示一行只读文本;

8TextComponent类是所有允许编辑文本的组件的超类;

9TextField对象是允许编辑单行文本的文本组件;

10TextArea对象是显示文本的多行区域,可以将它设置为允许编辑或只读。

 

二、事件监听机制

     


事件监听机制的特点:事件源、事件、监听器、处理方式;

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

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

3、监听器:将可以触发某一个事件的动作(不只一个动作)已经封装到了监听器中;同时也封装了事件的处理方式。

Java中,以上三者都已经定义好了,直接获取其对象利用即可,我们要做的,就是对产生的动作进行处理。


三、制作窗体的实例

要求:1、能够通过按扭和窗口X关闭窗体;

 2、注入键盘和鼠标事件;

 3、在窗体中创建TextFieldTextArea

 4、在TextField中输入文件目录,点击按扭,在TextArea中输出目录中所有文件;

 5、如果目录不存在,提未错误信息。

package blog.itheima;

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

class MyWindowGUI {
	private Frame frame;		//定义一个窗体
	private TextField textField;//定义一个文件编辑行
	private TextArea textArea;	//定义一个文件显示区域
	
	//定义三个按扭,跳转、确认、关闭窗体
	private Button go,ok,close;	
	//定义提示信息的对话框
	private Dialog dialog;
	//对话框中要输入的内容标签,一行只读文本
	private Label label;
	
	//初始化本类对象
	MyWindowGUI(){
		init();
	}

	public void init(){
		frame = new Frame("我的窗口");
		/*void setBounds(int x,int y,int w,int h)
		 移动组件并调整其大小,由x和y指定左上角的新位置,由w和h指定宽高*/
		frame.setBounds(300,200,500,300);
		
		/*FlowLayout:流式布局管理器,从左到右,Panel默认的布局
		BorderLayout:边界布局,东,南,西,北,中,Frame默认的布局
		GridLayout:网格布局管理器,规则的矩阵
		CardLayout:卡片布局管理器,选项卡
		GridBagLayout:网格包布局管理器,非规则的矩阵*/
		frame.setLayout(new FlowLayout());
		//构造具有指定列数的新空文本字段,列是近似平均字符宽度,与平台有关
		textField = new TextField(40);
		//构造一个新文本区,该文本区具有指定的行数和列数,初始为空
		textArea = new TextArea(12,56);
		//定义Button的名称
		go = new Button("转到");
		close = new Button("关闭窗口");
		
		/*创建dialog对象,三个参数:dialog的所有者,标题,处理模式
		ture,不处理不能进行下一步;为false,可以放在一边,继续做其它事情*/
		dialog = new Dialog(frame,"温馨提示",true);
		dialog.setBounds(400,300,300,100);
		dialog.setLayout(new FlowLayout());
		//定义初始为空的标签,后续输入内容
		label = new Label();
		ok = new Button("确定");	
		dialog.add(label);
		dialog.add(ok);

		frame.add(textField);
		frame.add(go);
		frame.add(close);
		frame.add(textArea);

		event();
		//把窗体设置为可见的
		frame.setVisible(true);
	}

	private void event(){
		//通过内部类,复写关闭窗口的方法,定义窗口监听,退出程序
		frame.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.out.println("窗口关闭");
				System.exit(0);
			}
		});
		/*close按扭监听,退出程序;ActionListener没有适配合器,
		方法只有一个,用于接收操作事件的侦听器接口。*/
		close.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.out.println("按扭关闭");
				System.exit(0);
			}
		});
		//ok按扭监听,如果触发,把dialog设置为不可见
		ok.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				dialog.setVisible(false);
			}
		});
		//文本行键盘监听,
		textField.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
				//如果输入ENTER键,调用show方法
					show();
				//同时按下Control和C,程序退出
				if(e.isControlDown() && e.getKeyCode()
						==KeyEvent.VK_C)
					System.exit(0);
			}
		});

		go.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				show();
			}
		});
		//在go按扭上注入鼠标事件
		go.addMouseListener(new MouseAdapter(){
			int count = 1;
			public void mouseClicked(MouseEvent e){
				//if(e.getClickCount()==2)
					//System.out.println("鼠标双击"+count++);
				System.out.println("鼠标点击"+count++);
			}
			public void mouseEntered(MouseEvent e){
				System.out.println("鼠标进入"+count++);
			}
			public void mouseExited(MouseEvent e){
				System.out.println("鼠标离开"+count++);
			}
		});
	}

	public void show(){
		//用文本行中得到键盘录入的数据,即目录
		String dirPath = textField.getText();
		//将目录封装成对象
		File dir = new File(dirPath);
		if(/*dir.exists() && */dir.isDirectory()){
			//清空文本区域,防止上次的输入残留
			textArea.setText("");
			String[] names = dir.list();
			for(String name : names){
				textArea.append(name+"\r\n");
			}
		} else {
			label.setText("您输入了错误路径:"+dirPath+",请重新输入");
			dialog.setVisible(true);
		}
	}

	public static void main(String[] args) {
		new MyWindowGUI();
	}
}
---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值