黑马程序员 知识点总结-Java GUI

时间:2022-03-15 11:58:05


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


GUI图形用户界面】


      GUI


             Graphical User Interface(图形用户接口)用图形的方式,来显示计算机操作的界面,


             这样更方便更直观。


             JavaGUI提供的对象都存在java.awtjavax.swing两个包中。


      CLI


             Command line User Interface (命令行用户接口)就是常见的Dos命令行操作,需要


             记忆一些常用的命令,操作不直观。


AwtSwing


      java.awt:AbstractWindow ToolKit(抽象窗口工具包),需要调用本地系统方法实现


      功能,属重量级控件


      javax.swing:Awt的基础上建立的一套图形界面系统,其中提供了更多的组件,


      而且完全由Java实现,增强了移植性,属轻量级控件。


【继承体系图】

黑马程序员 知识点总结-Java GUI



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



【布局管理器】


      布局:容器中组件的排放方式。


      常见的布局管理器:


  1. Flowlayout(流式布局管理器)

    从左到右的顺序排列

    Panel默认的布局管理器

  2. BorderLayout(边界布局管理器)

    东,南,西,北,中

    Frame默认的布局管理器

  3. GridLayout(网格布局管理器)

    规则的矩阵

  4. CardLayout(卡片布局管理器)

    选项卡

  5. GridBagLayout(网格包布局管理器)

    非规则的矩阵

    Frame窗体】

           Frame是带有标题和边框的顶层窗口。Frame创建时是不可见的,可以通过setVisible

           方法显示,若setVisible(false)则为隐藏窗体;可以通过setSize方法这只窗体大小;通

           setLocation方法设置窗体显示位置;通过add方法为窗体添加组件

           例:


		// 创建一个标题为MyAet的窗体
		Frame f = new Frame("MyAwt");
		// 设置创体的大小
		f.setSize(500, 400);
		// 设置窗体的显示位置
		f.setLocation(300, 200);
		// 设置窗体的布局管理器
		f.setLayout(new FlowLayout());
		// 创建一个按钮
		Button b = new Button("我是一个按钮");
		// 为窗体添加一个按钮
		f.add(b);
		// 将窗体设置为显示
		f.setVisible(true);

【事件监听】


      事件监听机制的组成:


             事件源:awtswing包中的图形化界面组件


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


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


             事件处理:对产生的动作进行处理


             对于前三者,在Java中已有定义,直接获取其对象就可以了,我们要做的事情就


             对产生的动作进行处理


      监听机制流程图:

黑马程序员 知识点总结-Java GUI


      【窗口事件】


             窗口事件包括打开、关闭、激活或停用、图标化或取消图标化等。处理窗口事件的


             类要么实现WindowListener接口(及其包含的所有方法),要么扩展抽象类


             WindowAdapter(仅重写所需的方法)。然后使用窗口的addWindowListener方法


             将从该类所创建的侦听器对象向该 Window注册。


      Action事件】


             动作事件,处理该事件实现ActionListener接口,而使用该类创建的对象可使用组


             件的 addActionListener方法向该组件注册。在发生操作事件时,调用该对象的


             actionPerformed方法。


      【鼠标事件】


             鼠标事件包括按下、释放、单击、进入或离开。处理鼠标事件的类要么实现


             MouseListener接口(及其包含的所有方法),要么扩展抽象类MouseAdapter(仅


             重写所需的方法)。然后使用组件的addMouseListener方法将从该类所创建的侦听


             器对象向该组件注册。


      【键盘事件】


             键盘事件包括按下、释放或键入键。处理键盘事件的类要么实现KeyListener接口


             (及其包含的所有方法),要么扩展抽象KeyAdapter类(仅重写有用的方法)。然


             后使用组件的addKeyListener方法将从该类所创建的侦听器对象向该组件注册。


【菜单】


      菜单栏:MenuBar


      菜单:MenuMenu对象是从菜单栏部署的下拉式菜单组件。菜单的所有项必须


                           属于类MenuItem或其子类之一


      菜单项:MenuItemMenuItem对象是菜单的所有项之一


      菜单添加方法:


  1. 创建菜单栏,菜单,菜单项

  2. 向菜单添加菜单项,或添加菜单作为子菜单

  3. 将菜单添加到菜单栏

  4. 通过setMenuBar()方法,将菜单添加到Frame


【练习】


      完成一个简单的记事本程序

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

public class MyMenuTest {
	private Frame f;// 窗体
	private MenuBar bar;// 菜单栏
	private Menu m;// 菜单
	private MenuItem omi, smi, cmi;// 打开,保存,退出菜单项
	private TextArea ta;// 文本区域
	private FileDialog oDlg, sDlg;// 打开,保存对话框
	private File file;// 要打开或要保存的文件

	public MyMenuTest()// 构造方法
	{
		init();
	}

	public void init()// 窗体初始化
	{
		// 窗体设置
		f = new Frame("MyFrame");
		f.setBounds(300, 200, 500, 400);
		// 创建菜单栏,菜单,菜单项,文本区域,打开对话框,保存对话框
		bar = new MenuBar();
		m = new Menu("文件");
		omi = new MenuItem("打开");
		smi = new MenuItem("保存");
		cmi = new MenuItem("退出");
		ta = new TextArea();
		oDlg = new FileDialog(f, "打开", FileDialog.LOAD);
		sDlg = new FileDialog(f, "打开", FileDialog.SAVE);
		// 为菜单添加菜单项
		m.add(omi);
		m.add(smi);
		m.add(cmi);
		// 为菜单栏天津唉菜单
		bar.add(m);
		// 为窗体设置菜单栏
		f.setMenuBar(bar);
		// 为窗体添加文本区域
		f.add(ta);
		// 添加事件
		myEvent();
		f.setVisible(true);
	}

	public void myEvent() {
		// 为窗体添加监听器
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		// 为退出菜单项添加监听器
		cmi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		// 为打开菜单项添加监听器
		omi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				open();
			}
		});
		// 为保存菜单项添加监听器
		smi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				save();
			}
		});
	}

	// 定义方法,保存文件
	private void save() {
		// 如果文件不存在,则弹出保存对话框
		if (file == null) {
			sDlg.setVisible(true);
			String dir = sDlg.getDirectory();
			String name = sDlg.getFile();
			if (dir == null || name == null)
				return;
			file = new File(dir, name);
		}
		// 创建输出流对象,将文本区域的数据写入到文件
		BufferedWriter bufw = null;
		try {
			bufw = new BufferedWriter(new FileWriter(file));
			String info = ta.getText();
			bufw.write(info);
			bufw.flush();
		} catch (IOException e) {
			throw new RuntimeException("保存失败!");
		} finally {
			try {
				if (bufw != null)
					bufw.close();
			} catch (IOException e) {
				System.out.println("关闭流失败");
			}
		}
	}

	// 定义方法,打开文件
	private void open() {
		oDlg.setVisible(true);
		String dir = oDlg.getDirectory();
		String name = oDlg.getFile();
		if (dir == null || name == null)
			return;
		System.out.println(dir + "\t" + name);
		file = new File(dir, name);
		ta.setText("");
		BufferedReader bufr = null;
		try {
			bufr = new BufferedReader(new FileReader(file));
			String line = null;
			while ((line = bufr.readLine()) != null) {
				System.out.println(line);
				ta.append(line + "\t\n");
			}
		} catch (IOException ex) {
			throw new RuntimeException("打开文件失败!");
		} finally {
			try {
				if (bufr != null)
					bufr.close();
			} catch (IOException ex) {
				System.out.println("输入流关闭失败!");
			}
		}
	}

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



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