GUI-java

一、概述

 


1、GUI:Graphical User Interface,即图形用户界面,用于计算机与用户交互的一种方式。
2、计算机与用户交互的两种方式:GUI和CLI
        GUI: Graphical User Interface,图形用户接口,用图形方式,来显示计算机操作界面,方便直观。
        CLI: Command Line User Interface,命令行用户接口,即常见的Dos命令行操作,须记住一些命令,操作不直观。
3、java为GUI提供的对象都放在了两个包中:java.Awt包和javax.Swing包。
        java.Awt包:Abstract Window Toolkit,即抽象窗口工具包。要调用本地系统方法实现功能,属重量级控件。
        javax.Swing包:在AWT的基础上建立的一套图形界面系统,其中提供了更多的组件,且完全由java实现,增强了移植性,属轻量级控件。
 
二、继承关系图

 

转存失败 重新上传 取消
Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。
Container常用子类:Window   Panel(面板,不能单独存在。)
Window常用子类:Frame  Dialog
 
三、布局管理器

1、布局:容器中的组件排列方式
2、常见的布局管理器:
        1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
        2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。
        3)GridLayout:网格式布局管理器,规则的矩阵
        4)CardLayout:卡片式布局管理器,即选项卡
        5)GridBayLayout:网格包布局管理器,非规则矩阵
3、如果存在多种布局方式,如何创建窗体界面呢?步骤:
        1)先将窗体Frame进行大区域的划分,设置其布局管理器,加入面板Panel
        2)将组件加入Panel,设置面板的布局管理器。
 
四、简单的窗体创建过程

1、创建Frame窗体:
        Frame f = new Frame("my Frame");//可设置标题,即窗体名字
2、对窗体进行基本设置:如大小,位置,布局等:
        f.setSize(int wight,int hight);//窗体大小设置
        f.setLocation(int x,int y);//窗体显示位置设置,横纵坐标
        f.setBounds(int x,int y,int wight,int hight),也可以直接用这个方法对大小和位置设置
        f.setLayout(Layout layout),参数为指定的布局管理器,如FlowLayout
3、定义组件:
       如Button b = new Button(“my Button”);//可设置组件的名称
4、将组件通过窗体的add方法添加到窗体中:
        f.add(b);//将按钮组件添加进窗体
5、让窗体显示:
        f.setVisible(boolean b);//通过设置参数是true还是false是否显示窗体
代码示例:
import java.awt.*;
/*
创建图形化界面:
1,创建frame窗体。
2,对窗体进行基本设置。
	比如大小、位置、布局。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
5,让窗体显示,通过setVisible(true)
*/
class  AwtDemo
{
	public static void main(String[] args) 
	{
		Frame f = new Frame("my awt");
		f.setSize(400,300);
		f.setLocation(300,200);
		f.setLayout(new FlowLayout());
 
		Button b = new Button("确认按钮");
		f.add(b);
		f.setVisible(true);
	}
}
五、事件监听机制
 
1、事件监听机制组成:
        1)事件源(组件):awt或swing包中的那些图形界面组件
        2)事件(Event):每一个事件源都有自己特有的对应事件和共性事件
        3)监听器(Listener):将可触发某一事件的动作(不只一个动作),都封装到监听器中。
        4)事件处理:引发事件后的处理方式。
2、事件监听机制流程图
 

转存失败 重新上传 取消
3、使用说明
组成的前三个在java中都已经定义好了,直接获取其对象来用即可,我们需要做的就是对产生的动作进行处理。
步骤:
        1)确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
        2) 一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
代码示例:
import java.awt.*;
import java.awt.event.*;
 
class  FrameDemo
{
	//定义该图形所需的组件的引用。
	private Frame f;
	private Button b;
	FrameDemo()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my frame");
 
		//对frame进行基本设置
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
 
		b = new Button("my button");
 
		//将组件添加到frame中
		f.add(b);
 
		//加载一下窗体上的事件。
		myEvent();
 
		//显示窗体
		f.setVisible(true);
 
	}
	private void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("退出按钮");
				System.exit(0);
			}
		});
	}
 
	public static void main(String[] args) 
	{
		new FrameDemo();
	}
}
例:键盘鼠标事件
import java.awt.*;
import java.awt.event.*;
 
class MouseAndKeyEvent 
{
	private Frame f;
	private Button b;
	private TextField tf;
	MouseAndKeyEvent()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my frame");
 
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
 
		tf = new TextField(20);
 
		b = new Button("my button");
 
		f.add(tf);
		f.add(b);
 
		myEvent();
 
		f.setVisible(true);
 
	}
	private void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
 
		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();
				}
			}
		});
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("action ok");
			}
		});
		b.addMouseListener(new MouseAdapter()
		{
			public void mouseEntered(MouseEvent e)
			{
				System.out.println("鼠标进入到该组件");
			}
			public void mouseClicked(MouseEvent e)
			{
				System.out.println("单击动作");
				if(e.getClickCount()==2)
					System.out.println("双击动作");
			}
 
		});
		b.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				if (e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
					System.out.println("crtl+enter is run!");
				System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"..."+e.getKeyCode());
 
			}
		});
 
	}
 
	public static void main(String[] args) 
	{
		new MouseAndKeyEvent();
	}
	
}
例:对话框:Dialog
import java.awt.*;
import java.awt.event.*;
import java.io.*;
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);
		d.setBounds(400,200,240,160);
		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();
 
			}
		});
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
 
		
		but.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				 showDir();
			}
		});
		
	}
 
	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);
			}
			tf.setText("");
 
	}
 
	public static void main(String[] args) 
	{
		new MyWindowDemo();
	}
}
例:菜单
package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
 
public class MenuDemo 
{
	private Frame f;
	private MenuBar mb;
	private TextArea ta;
 
	private Menu m,subMenu;
	private MenuItem closeItem,subItem,openItem,saveItem;
 
	private FileDialog openDia,saveDia;
	private File file;
 
	MenuDemo()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my window");
 
		f.setBounds(300,100,600,500);
		//f.setLayout(new FlowLayout());
 
		mb = new MenuBar();
 
		ta = new TextArea();
 
		m = new Menu("文件");
 
		subMenu = new Menu("新建文件");
		subItem = new MenuItem("java文件");
		openItem = new MenuItem("打开");
		saveItem = new MenuItem("保存");
		closeItem = new MenuItem("退出");
 
		openDia = new FileDialog(f,"打开",FileDialog.LOAD);
		saveDia = new FileDialog(f,"保存",FileDialog.SAVE);
 
 
		subMenu.add(subItem);
		m.add(subMenu);
		m.add(openItem);
		m.add(saveItem);
		m.add(closeItem);
		mb.add(m);
 
		f.setMenuBar(mb);
		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 bw = new BufferedWriter(new FileWriter(file));
					String text = ta.getText();
					bw.write(text);
					bw.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();
				if(dirPath==null || fileName==null)
					return;
				ta.setText("");
				file = new File(dirPath,fileName);
	
				try
				{
					BufferedReader br = new BufferedReader(new FileReader(file));
					String line = null;
					while((line=br.readLine())!=null)
					{
						ta.append(line+"\r\n");
					}
				}
				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 MenuDemo();
		System.out.println("Hello World!");
	}
}
六、jar包双击执行
    
步骤如下:
        1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;
        2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件
        3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。
        4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令
        5、此时双击即可执行。
说明:
        1)在固定格式中:
                a、如果无空格:在编译的时候,就会报IO异常,提示无效的头字段,即invalidheader field。这说明1.txt在被IO流读取。
                b、如果无回车:在列表清单.MF中不会加入相应的加载主类的信息,也就是说配置清单的属性主类名称不会加载进清单中,也就不会执行。
        2)jar文件必须在系统中注册,才能运行。注册方法如下:
        A.对于XP系统:
               a.打开任意对话框,在菜单栏点击工具按钮,选择文件夹选项
               b.选择新建--->扩展名,将扩展名设置为jar,确定
               c.选择高级,可更改图标,然后点击新建,命名为open,
               d.在用于可执行应用程序中,点浏览,将jdk下的bin的整个文件路径添加进来,并在路径后添加-jar即可。
        B.对于win7系统:
               a.改变打开方式:右击.jar文件,点击打开方式,选择默认程序为jdk下bin中的javaw.exe应用程序。
               b.修改关联程序的注册表:打开注册表(win+r),找到注册表路径\HKEY_CLASSES_ROOT\Aplications\javaw.exe\shell\open\command下的字符串值,右击点修改,在原路径的中添加-jar,如:"C:\ProgramFiles\Java\jre6\bin\javaw.exe" -jar "%1",注意-jar两边要有空格,保存。
              c.双击即可执行jar程序,如果仍不能执行,则需下载最新版的jdk。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值