JAVA基础---GUI---概述,组件,事件监听,生成.jar可执行文件

第一讲.GUI概述

  1. GUI即Graphical User Interface(图形用户接口),方便直观。CLI即Command Line User Interface(命令行用户接口),像DOS命令行,需要记忆常用命令,不直观。
  2. Java为GUI提供的对象存储在:java.awt和javax.swing两个包中。
  3. awt:Abstact Window ToolKit(抽象窗口宫工具包),调用本地系统实现功能。重量级控件。
  4. swing:基于awt,提供更多组件,完全由Java编写。增强可移植性,轻量级控件。
  5. Java组件对象的继承关系图,Container可以添加组件
                          

第二讲. 基本设置:Frame,Button,TextField,TextArea等基本组件的初始设置

  1. java中的布局分为:
FlowLayout:流式布局从左到右顺序排列,panel默认布局
BorderLayout:边界布局可指定“东南西北中”,填充式,frame默认布局
GridLayout: 网格布局规则的矩阵
CardLayout: 卡片式布局选项卡
GridBadLayout:网络包式布局非规则的矩阵
2. 通过setMenuBar(MenuBar mb)的方法向frame中加入菜单,其他组件通过add方法加入。
//基本设置
		frame = new Frame("My frame!");//默认是边界式布局
		//frame.setSize(500,100);//设置大小,横坐标,纵坐标
		//frame.setLocation(300,100);//顶点据边框的距离,左边距,上边距。
		frame.setBounds(300,100,500,100);
		frame.setLayout(new FlowLayout());//流式布局
		//添加组件
		button = new Button("I'm a button!");
		tf = new TextField(20);
		frame.add(button);
		frame.add(tf);
3.通过setVisible(true)的方法显示Window类型的组件。除以上这些,其他具体设定只能详见JDK了。。。

第三讲.事件响应机制

  1. 事件响应机制如下图所示。Java的处理方式为:事件源即awt和swing包中定义的图形界面组件(Component);每一个事件源都有自己所特有的对应事件(XXXEvent)和共性事件;将可以触发某一事件的动作(不只一个动作)封装到监视器(XXXListener)中。    
  2. 以下代码为一个实例:
  3. 通过创建一个实现Listener接口或者Adapter抽象类的匿名内部类方式,实现事件处理,简单方便。算得上是匿名内部类一大应用。
  4. Listener为接口,其中声明了多种事件,为方便起见,Java提供了适配器类Adapter实现Listener,但却只为其中方法做了空实现(这也体现了Java的严谨或者或死板吧。。。)。Adapter也因此成为了虽然所有方法都是实的(空实现)却被声明为抽象类(abstract)的奇葩存在。
  5. 可以通过对应的Event类获得状态信息,如可以通过KeyEvent过得按的是哪个键(getKeyCode()方法),或者是通过MouseEvent获得是双击(getClickCount(方法))或者是单击等等。
  6. 搞清楚规律后记忆起来还是挺容易的。。。

private void myEvent(){
		frame.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
			//还有windowOpened及windowActived 等事件
		});
		//让按钮具备关闭程序的功能
		//button没有适配器(适配器是为了方便创建事件对象)
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.out.println("action performed");
			}
		});
		//鼠标事件
		button.addMouseListener(new MouseAdapter(){
			private int count = 1;
			public void mouseEntered(MouseEvent e){
				System.out.println("Mouse Entrered "+(count++));
			}
			public void mouseClicked(MouseEvent e){
				if(e.getClickCount()==2)//通过Event对象,判断双击
					System.out.println("Double Clicked"+(count++));
			}
		});
		//键盘事件
		button.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"..."+e.getKeyCode());
				if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
					System.exit(0);
			}
		});

总结. 基本设计机构

import java.awt.*;
import java.awt.event.*;
class Demo 
{
	//声明组件
	private Frame frame;...

	Demo(){
		init();
	}
	//初始化
	public void init(){
		//基本设置
			frame.setBounds();
			frame.setLayout();...
		//添加组件
			frame.add(button);...
		//加载事件
		myEvent();
		//显示窗体
		frame.setVisible(true);//设置为可见
	}
	//事件和图形化组件分离
	private void myEvent(){
		//事件
		button.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				//事件处理
			}
		});
		...
	}

	public static void main(String[] args) 
	{
		/***只要开启图形化界面,就会开启一个新线程**/
		new Demo();
	}
}

练习,笔记本的文件打开和保存功能:

package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyMenuDemo 
{
	private Frame f;
	private MenuBar mb;
	private Menu m;
	private MenuItem openitem,saveitem,closeitem;//菜单
	private TextArea ta;
	private FileDialog openDia,saveDia;//打开对话框,保存对话框
	MyMenuDemo(){
		init();
	}
	private void init(){
		//基本设置
		f = new Frame("Test");
		f.setBounds(300,100,500,400);
		//添加组件
		mb = new MenuBar();
		m = new Menu("文件");
		closeitem = new MenuItem("退出");
		saveitem = new MenuItem("保存");
		openitem = new MenuItem("打开");
		f.setMenuBar(mb);
		mb.add(m);
		m.add(openitem);
		m.add(saveitem);
		m.add(closeitem);
		ta = new TextArea();
		f.add(ta);
		openDia = new FileDialog(f,"open",FileDialog.LOAD);//Java中自带的文件对话框
		saveDia = new FileDialog(f,"save",FileDialog.SAVE);//new对话框通常要指定一个附属的frame
		//添加事件监听
		myEvent();
		//显示窗体
		f.setVisible(true);
	}
	private void myEvent(){
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});//窗体的关闭
		closeitem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.exit(0);
			}
		});//菜单中的退出
		openitem.addActionListener(new ActionListener(){//用这个ActionListener更泛用一些
			public void actionPerformed(ActionEvent e){//用KeyListener或MouseListener更具体一些
				openDia.setVisible(true);
				String dir = openDia.getDirectory();
				String fileName = openDia.getFile();
				if (dir == null||fileName == null)//文件对话框中点取消按钮的情况
					return;
				File file = new File(dir,fileName);
				ta.setText("");
				try
				{
					BufferedReader in = new BufferedReader(new FileReader(file));
					String line;
					while((line=in.readLine())!=null){
						ta.append(line);
						ta.append("\r\n");
					}
					in.close();//这里用不用finally语句
				}
				catch (IOException ex)
				{
					throw new RuntimeException("Open Failed!");
				}
			}
		});//打开一个文件,将内容显示到文本区域ta中。
		saveitem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				saveDia.setVisible(true);
				String dir = saveDia.getDirectory();
				String fileName = saveDia.getFile();
				if (dir == null||fileName == null)//如果点取消的话
					return;
				File file = new File(dir,fileName);
				byte[] data = ta.getText().getBytes();
				byte[] buff = new byte[1024];int len;
				ByteArrayInputStream in = new ByteArrayInputStream(data);//用了一个数组流
				try
				{
					System.out.println(file);
					OutputStream out = new FileOutputStream(file);
					while((len = in.read(buff))!=-1)
						out.write(buff,0,len);
					out.close();
				}
				catch (IOException ex)
				{
					throw new RuntimeException("Save Failed!");
				}
			}
		});//将文本区域ta中的数据保存到一个文件中
	}
	public static void main(String[] args) 
	{
		new MyMenuDemo();
	}
}
第四讲. .jar可执行文件的生成
  1. 先声明一个包。拿上面的简单记事本为例子:开头声明了 mymenu包
  2. 利用javac -d去指定一个路径存放编译出的包,例如:java -d D:\ mymenu 
  3. 利用jar -cvfm 生成.jar可执行程序,例如:jar -cvfm my.jar 1.txt mymenu
  4. 1.txt 存储Main-Class: mymenu.MyMenuDemo回车。这是一个配置信息,表示主程序的位置。注意最后要有回车,键值之间有个空格。
  5. 这时在d盘下生成一个my.jar程序,双击即可运行~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值