黑马程序员—JAVA基础—GUI(图形化界面编程)

时间:2023-01-27 13:13:58
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、操作软件的两种方式

1、GUI(Graphical User Interface)图形用户接口,用图形的方式来变现软件,操作起来跟方便直观

2、GLI(Commandline User Interface )命令行用户接口,也就是dos命令行的方式,操作繁琐

不直观

二、GUI编程

1、java提供的的对象都存在java.awt和java.swing包中

2、awt和swing的区别

java.Awt:Abstract Window ToolKit (抽象窗口工具包),
需要调用本地系统方法实现功能。属重量级控件。
javax.Swing:在AWT的基础上,建立的一套图形界面系统,
其中提供了更多的组件,而且完全由Java实现。增强了移植性,
属轻量级控件

三、继承关系

黑马程序员—JAVA基础—GUI(图形化界面编程)

Container容器通过add方法添加其他组件

四、布局管理器(组件的摆放方式,5种)

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

黑马程序员—JAVA基础—GUI(图形化界面编程)

        2、BorderLayout(边界布局管理器):如果没有指定组件的摆放位置,会填充整个窗体,再添加组件就会覆盖原来的组件
      东,南,西,北,中
      Frame默认的布局管理器。

黑马程序员—JAVA基础—GUI(图形化界面编程)
        3、GridLayout(网格布局管理器)
      规则的矩阵

黑马程序员—JAVA基础—GUI(图形化界面编程)
        4、GridBagLayout(网格包布局管理器):组件4位网格包式布局
      非规则的矩阵

        5、CardLayout(卡片布局管理器)

      选项卡

黑马程序员—JAVA基础—GUI(图形化界面编程)

五、事件监听机制:事件源(组件)、事件(event)、监听器(Listener)、事件处理(自定义处理方式)

流程图

黑马程序员—JAVA基础—GUI(图形化界面编程)

练习1:定义一个界面,输入硬盘地址后,将地址下的文件以及文件夹的名称显示出来

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class ShowFilesList 
{
	private Frame f;
	private TextField tf;
	private TextArea ta;
	private Button show;

	private Dialog dia;
	private Label l;
	private Button but;
	ShowFilesList()
	{
		init();
	}
	public void init()
	{
		f = new Frame("文件管理器");//定义一个窗体对象
		/*
		设置位置,第一个参数为窗体与电脑屏幕左边的距离
		第二个参数为窗体与电脑屏幕右边的距离
		第三个参数为窗体的长度(横坐标)
		第三个参数为窗体的宽度(纵坐标)
		*/
		f.setBounds(400,100,600,500);
		f.setVisible(true);//设置窗体可见
		f.setLayout(new FlowLayout());//设置为流式布局

		tf = new TextField(60);//单行文本输入框,用于输入地址
		show = new Button("转到");//按钮,用于触发显示地址的下的文件以及文件夹名称的事件
		ta = new TextArea(25,60);//多行文本输入框,用于显示文件以及文件夹名称

		dia = new Dialog(f,"错误信息",true);//弹出错误信息的对话框
		dia.setBounds(500,200,200,150);//同样设置对话框的大小和边界
		dia.setLayout(new FlowLayout());//设置对话框的布局方式为流式布局
		l = new Label();//标签,用于显示错误信息
		but = new Button("确定");//用于关闭对话框
		dia.add(l);
		dia.add(but);

		f.add(tf);
		f.add(show);
		f.add(ta);
		myEvent();
	}
	//各种事件
	public void myEvent()
	{
		//给对话框注册窗口监听器,用于点关闭按钮就将对话框隐藏
		dia.addWindowListener(new WindowAdapter()//匿名内部类,窗口监听器适配器
		{
			//覆盖窗口关闭的方法
			public void windowClosing(WindowEvent e)
			{
				dia.setVisible(false);
			}
		});
		//给对话框的按钮添加动作监听器
		but.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				dia.setVisible(false);
			}
		});
		//给单行文本款添加键盘监听器,用于点击回车键就触发,显示文件的方法
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
					showDir();
			}
		});
		//给转到按钮添加动作监听器
		show.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				showDir();
			}
		});
		//给主窗体添加窗口监听器
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}
	//显示文件以及文件夹的方法,用到File类中的方法
	public void showDir()
	{
		String path = tf.getText();
		File dir = new File(path);
		//判断文件是否存在以及是否是文件夹
		if (dir.exists() && dir.isDirectory())
		{
			ta.setText("");//每显示一次,就将原来显示的内容清空
			String[] files = dir.list();//显示目录下所有文件以及文件夹的名称
			for(String s:files)
			{
				//多行文本框添加内容的方法,类似字符缓冲区对象
				ta.append(s+"\t\n");
			}
		}
		else
		{
			//文件不存在或者不是文件夹,就给对话框中的标签设置提示内容
			String info = path+"路径不存在!";
			l.setText(info);
			dia.setVisible(true);//设置对话框显示
		}
		
	}
	public static void main(String[] args) 
	{
		new ShowFilesList();
	}
}
黑马程序员—JAVA基础—GUI(图形化界面编程)黑马程序员—JAVA基础—GUI(图形化界面编程)

练习2:定义一个图形化界面,实现打开查看、编辑、保存文本文件

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class FileBrowser 
{
	private Frame f;
	private TextArea ta;
	private MenuBar mb;
	private Menu m;
	private MenuItem open,save,exit;
	private FileDialog openFile,saveFile;
	private File file;
	FileBrowser()
	{
		init();//在构造函数中初始化界面
	}
	public void init()
	{
		f = new Frame("记事本");
		f.setBounds(400,100,600,500);
		f.setVisible(true);

		ta = new TextArea();
		mb = new MenuBar();//设置菜单选项
		m = new Menu("文件");//设置菜单
		open = new MenuItem("打开");//分别设置三个字菜单
		save = new MenuItem("保存");
		exit = new MenuItem("退出");
		m.add(open);//分别三个子菜单添加到菜单选项中
		m.add(save);
		m.add(exit);
		mb.add(m);
		f.setMenuBar(mb);//给窗体设置菜单选项
		f.add(ta);

		openFile = new FileDialog(f,"打开文件",FileDialog.LOAD);//打开文件对话框,LOAD
		saveFile = new FileDialog(f,"保存文件",FileDialog.SAVE);//保存文件对话框,SAVE
		myEvent();
	}
	public void myEvent()
	{
		open.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent ea)
			{
				openFile.setVisible(true);
				String filePath = openFile.getDirectory();//从文件对话框中获取文件路径
				String fileName = openFile.getFile();//从文件对话框中获取文件名
				if(filePath==null || fileName==null)//先判断文件路径和文件名是否问空
					return ;//如果为空就返回,不执行下面代码
				ta.setText("");
				file = new File(filePath,fileName);
				BufferedReader bfr = null;
				try
				{
					bfr = new BufferedReader(new FileReader(file));
					String line = null;
					while ((line=bfr.readLine())!=null)
					{
						ta.append(line+"\r\n");//在写入文件的时候要加入回车符标记
					}
				}
				catch (IOException e)
				{
					throw new RuntimeException("打开文件失败");
				}
				finally
				{
					try
					{
						if(bfr!=null)
							bfr.close();
					}
					catch (IOException e)
					{
						throw new RuntimeException("关闭失败");
					}
				}
			}
		});
		save.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent ea)
			{
				if (file==null)//先判断文件是否存在,如果存在就不弹出文件对话框,直接保存
				{
					saveFile.setVisible(true);
					String filePath = openFile.getDirectory();
					String fileName = openFile.getFile();
					if(filePath==null || fileName==null)//读取文件同样进行判断
						return ;
					file = new File(filePath,fileName);
				}
				BufferedWriter bfw = null;
				try
				{
					bfw = new BufferedWriter(new FileWriter(file));
					String s = ta.getText();
					bfw.write(s);
				}
				catch (IOException e)
				{
					throw new RuntimeException("保存失败");
				}
				finally
				{
					if (bfw!=null)
					{
						try
						{
							bfw.close();
						}
						catch (IOException e)
						{
							throw new RuntimeException("关闭失败");
						}
					}
				}
			}
		});
		exit.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 FileBrowser();
	}
}
黑马程序员—JAVA基础—GUI(图形化界面编程)