GUI

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

1.GUI : Graphical User Interface(图形用户接口)

用图形的方式,来显示计算机操作的界面,这样更方编直观。

2.CLI: Command line User Interfac(命令行用户接口)

最常见的Dos命令行操作。  需要记忆一些常用的命令,操作不直观。

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

3.Awt和Swing区别:

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

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

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

3.GUI框架图:

注意:

1)Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。

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

   Window常用子类:Frame  Dialog

2)lable标签,用于封装文字;

checkbox复选框,如图:

TextArea为多行文本,TextFiled为单行文本

4.布局管理器

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

常见的布局管理器:

FlowLayout(流式布局管理器):从左到右的顺序排列  Panel默认的布局管理器

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

GridLayout (网格布局管理器) 规则的矩阵

CardLayout(卡片布局管理器) 选项卡

GridBagLayout(网格包布局管理器) 非规则的矩阵

Frame介绍:是带有标题和边框的顶层窗口。

如图:


构造方法:Frame(String title) 构造一个新的、最初不可见的、具有指定标题的Frame对象

常用方法:public Component add(Component comp) 将指定组件追加到此容器的尾部。

public void setSize(int width,int height) 调整组件的大小,使其宽度为width,高度为height

public void setLocation(int x , int y) 将组件移到新位置。通过此组件父级坐标空间中的xy 参数来指定新位置的左

上角。

public void setBounds(int x , int y , int width, int height) 移动组件并调整其大小。由xy 指定左上角的新位置,由 widthheight 指定新的大小。

public void setVisible(boolean b) 根据参数 b 的值显示或隐藏此组件。

Frame小练习:

<span style="font-size:14px;">package GUI;
import java.awt.*;
import java.awt.event.*;
public class FrameDemo {

	public static void main(String[] args) {
		//创建Frame对象
		Frame f = new Frame("awt demo");
		//设置Frame大小
		f.setSize(500,400);
		//设置Frame位置
		f.setLocation(300, 200);
		//为Frame指定布局器
		f.setLayout(new FlowLayout());
		//为Frame添加监听
		f.addWindowListener(new WindowAdapter(){
			//窗口激活监听
			public void windowActivated(WindowEvent e){
				System.out.println("window Activated");
			}
			//窗口打开监听
			public void windowOpened(WindowEvent e){
				System.out.println("window opened");
			}
			//窗口关闭监听
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		//设置窗口可见
		f.setVisible(true);
	}

}
</span>

5.事件监听

事件监听的组成:

事件源(组件)

事件(Event)

监听器(Listener)

事件处理(引发事件后处理方式)

 

事件监听的特点:

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

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

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

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

理。

 

密码锁举例:

如图:

注意:组成的前三个在java中都已将定义好了,直接获取其对象来用即可,我们需要做的就是对产生的动作进行处理。

步骤:

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

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


练习窗口监听:

<span style="font-size:14px;">package GUI;
import java.awt.*;
import java.awt.event.*;
public class FrameDemo_2 {
	//把窗口的初始化和事件的监听放到构造函数中
	FrameDemo_2(){
		init();
		myEvent();
	}
	private Frame f = null;
	private Button  b = null;
	//初始化窗口  按钮
	public void init(){
		f = new Frame("my Frame");
		b = new Button("my Button");
		f.add(b);
		f.setBounds(300, 200, 600, 500);
		f.setLayout(new FlowLayout());
		f.setVisible(true);
		
	}
	//事件监听
	public void myEvent(){
		//为窗口添加事件监听 抽口关闭功能
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		//为按钮添加事件监听  按键关闭功能
		b.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				System.out.println("退出,按钮干的!");
				System.exit(0);
				
			}
			
		});
		
	}

	public static void main(String[] args) {
		new FrameDemo_2();

	}

}
</span>


 

键盘和鼠标事件:

重点:确定事件源、确定事件、确定监听器、确定操作谁、

<span style="font-size:14px;">package GUI;
import java.awt.*;
import java.awt.event.*;

public class MouseAndKeyDemo {
	MouseAndKeyDemo(){
		init();
		myEvent();
	}
	private Frame f = null;
	private Button  b = null;
	TextField tf = null;
	//初始化窗口  按钮
	public void init(){
		f = new Frame("my Frame");
		b = new Button("my Button");
		tf =new TextField(20);
		f.add(b);
		f.add(tf);
		f.setBounds(300, 200, 600, 500);
		f.setLayout(new FlowLayout());
		f.setVisible(true);
		
	}
	//事件监听
	public void myEvent(){
		//为窗口添加事件监听
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		//**********************************************************
	    //键盘事件
		//判断组合键Ctrl和Enter
		b.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
					System.out.println("Ctrl和ENTER 被按下");	
			}
		});
		//屏蔽键
		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.addMouseListener(new MouseAdapter(){
			int count = 1;
			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++);
				}
			}
		});
	}

	public static void main(String[] args) {
		
		new MouseAndKeyDemo();

	}

}
</span>

6.Dialog:对话框

构造方法:Dialog(Frame owner, String title, boolean modal)  构造一个最初不可见的Dialog,它带有指定的所有者

 Frame、标题和模式。

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

构造方法:FileDialog(Frame parent , String title, int mode)  创建一个具有指定标题的文件对话框窗口,用于加载或

保存文件。

常用方法:String getFile()   获取此文件对话框的选定文件。

String getDirectory()  获取此文件对话框的目录。

列出指定目录的文件:

<span style="font-size:14px;">package GUI;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyWindowDemo {
	//构造函数
	MyWindowDemo(){
		init();
	}
	//定义组件
	private Frame f ;
	private TextField tf;
	private Button b ;
	private TextArea ta;
	private Dialog d;
	private Label lab;
	private Button bok;
	//初始化组件
	public void init(){
		//基本设置
		f = new Frame("my window");
		f.setBounds(300, 200, 600, 500);
		f.setLayout(new FlowLayout());
		b = new Button("转到");
		tf = new TextField(60);
		ta = new TextArea(25,70);
		//添加组件
		f.add(tf);
		f.add(b);
		f.add(ta);
		//Dialog基本设置
		d = new Dialog(f,"提示消息",true);
		d.setBounds(300, 200, 200, 100);
		d.setLayout(new FlowLayout());
		lab = new Label();
		bok = new Button("确定");
		//为Dialog添加组件
		d.add(lab);
		d.add(bok);
		//事件
		myEvent();
		//窗体显示
		f.setVisible(true);
	
	}
	//添加事件
	public void myEvent(){
		   //为tf文本框添加键盘监听  输入目录完毕后按回车可以实现跳转功能
		   tf.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				if(e.getKeyCode() == KeyEvent.VK_ENTER){
					showDir();
				}
			}
		});
		//为对话框见天窗口监听  对话框关闭功能 
		d.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				d.setVisible(false);
			}
		});
		//为bok按钮添加动作监听  bok按钮关闭对话框功能
		bok.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				d.setVisible(false);
				
			}
			
		});
		//为f窗口天剑监听  窗体关闭功能
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		//为b按钮天剑动作监听  为b按钮添加显示目录功能
		b.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				showDir(); //显示目录
				
			}

						
		});
	}
	//显示目录
	private void showDir() {
		String Dirpath = tf.getText();//获得父目录
		File Dir = new File(Dirpath);//获得文件名
		//如果文件存在且是一个目录
		if(Dir.exists()&& Dir.isDirectory()){
			String[] names = Dir.list();//获取目录下的文件名
			ta.setText("");//清空TextArea
			for(String name: names){
				ta.append(name+"\r\n");//TextArea添加目录下的文件名
			}
		}else{//如果不是目录 或者目录不存在 显示对话框
			//输出信息
			String Info = "您输入的目录"+Dirpath+"是错误的,请重新输入";
			lab.setText(Info);//设置lab的值
			//对话框可见
			d.setVisible(true);
		}
		
	}


	public static void main(String[] args) {
		new MyWindowDemo();
		

	}

}
</span>


 


7.菜单

Menu:菜单,继承MenuItem;有右三角的图标存在,可添加MenuMenuItem

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

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

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

通过setMenuBar()方法,将菜单添加到Frame中。

小练习:

<span style="font-size:14px;">package GUI;
import java.awt.*;
import java.awt.event.*;
public class MyMenuDemo {
	//构造函数
	MyMenuDemo(){
		init();
	}
	//组件
	private Frame f ;
	private MenuBar mb ;
	private Menu m,subMenu;
	private MenuItem closedItem,subItem;
	//初始化组件
	public void init(){
		f = new Frame("My Menu");
		f.setBounds(300, 200, 600, 500);
		mb = new MenuBar();//创建菜单栏
		m = new Menu("文件");
		subMenu = new Menu("子菜单");//创建菜单
		closedItem = new MenuItem("退出");//创建菜单项
		subItem = new MenuItem("子条目");
		//把菜单栏添加到窗体
		f.setMenuBar(mb);
		//为菜单栏添加组件
		mb.add(m);
		m.add(subMenu);
		m.add(closedItem);
		subMenu.add(subItem);
		
		myEvent();
		f.setVisible(true);
	}
	//添加事件
	public void myEvent(){
		//为窗口添加监听事件 菜单具备关闭时间 
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		//为退出菜单项添加动作监听 窗体关闭功能
		closedItem.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
				
			}
			
		});
	}

	public static void main(String[] args) {
		new MyMenuDemo();

	}

}
</span>

具有打开和保存功能的简单记事本程序:

<span style="font-size:14px;">package GUI;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MenuText {
	MenuText(){
		init();
	}
	//定义组件
	private Frame f;
	private MenuBar mb;
	private Menu m;
	private MenuItem openItem,closeItem,saveItem;
	private FileDialog openDia ,saveDia;
	private TextArea ta ;
	private File fi;
	//初始化组件
	public void init(){
		f = new Frame("My Text");//初始化窗体
		mb = new MenuBar();//初始化菜单栏
		m = new Menu("文件");//初始化菜单
		openItem = new MenuItem("打开");//初始化打开菜单
		saveItem = new MenuItem("保存");//初始化保存菜单
		closeItem = new MenuItem("关闭");//初始化关闭菜单
		//把菜单栏添加到窗体中
		f.setMenuBar(mb);
		//把菜单添加到菜单栏中
		mb.add(m);
		//把菜单项添加到菜单中
		m.add(openItem);
		m.add(saveItem);
		m.add(closeItem);
		f.setBounds(300, 200, 600, 500);
		openDia = new FileDialog(f,"我的打开",FileDialog.LOAD);//打开文件对话框
		saveDia = new FileDialog(f,"我的关闭",FileDialog.SAVE);//保存文件对话框
		//文本输入区域
		ta = new TextArea();
		f.add(ta);
		myEvent();//事件监听
		f.setVisible(true);//设置窗体可见
	}
    //添加监听
	private void myEvent() {
		//为关闭菜单项添加事件 使该菜单具备关闭窗体功能
		closeItem.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			
				
			}
			
		});
		//窗口监听 窗体关闭功能
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		//打开菜单栏动作监听 打开文件功能
		openItem.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				openDia.setVisible(true);//设置文件打开窗口可见
				String Dir = openDia.getDirectory();//获得目录
				String file = openDia.getFile();//获得文件名
				if(Dir==null || file ==null){
					return;
				}
			    fi = new File(Dir,file);//新建文件对象 
				
				ta.setText("");//将TextArea置空
				//读取文件
				try{
					//带缓冲的输入流
					BufferedReader br = new BufferedReader(
							new FileReader(fi));
					String line = null;
					while((line = br.readLine()) != null){
						ta.append(line+"\r\n");//添加到TextArea区域中
					}
					br.close();//关闭流
				}catch(IOException e){
					throw new RuntimeException("文件读取失败");
				}
				
			}
			
		});
		//保存菜单项添加动作监听 保存文件功能
		saveItem.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				//判断 如果文件不存在 跳出保存对话框 并新建文件
				if(fi == null){
					saveDia.setVisible(true);//设置文件保存对话框可见
					String Dir = saveDia.getDirectory();//获取目录
					String file = saveDia.getFile();//获取文件名
					if(Dir ==null || file==null){//如果点击取消 结束方法
						return;
					}
					fi = new File(Dir,file);//创建文件
				}
				//往文件中写数据
				try{
					//带缓冲的输出流
					BufferedWriter bw = new BufferedWriter(
							new FileWriter(fi));
					//获取TextArea区域的文本数据
					String data = ta.getText();
					//写
					bw.write(data);
					//关闭流
					bw.close();
					
				}catch(IOException e){
					throw new RuntimeException("保存失败");
				}
				
				
				
			}
			
		});
	}

	public static void main(String[] args) {
		new MenuText();

	}

}
</span>



 

 

 


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值