黑马程序员——GUI图形用户界面

------- android培训、java培训、期待与您交流! ----------

 

GUI(Graphical User Interface)由组件和容器组成,容器也是一种组件

Frame

这个类用于创建窗口

Frame frame = new Frame();

常用的方法

setVisible()                设置可见

setSize(int width, int hight)              设置窗口大小

setLocation(int x, int y)            设置窗口在桌面显示的位置

add(button)               添加一个按钮, 也可以添加其它组件

 

Button

用于穿件一个按钮的组件

语法

Button button = new Button(String buttonName);

 

布局

用于布局的类有一下几种FlowLayout BorderLayout GridLayout GridBagLayout CardLayout,它们都实现了LayoutManager接口

 

Frame中提供了setLayout(LayoutManagerlayout)方法来给窗口设置布局

 

事件监听器

事件就是用户的操作

事件源: 发生事件的组件

监听器: 实现了Listener接口的类,包含若干对事件处理的方法, 要添加监听器必须先定义类实现Listener接口并实现里面的抽象方法

监听器适配器: 这是个实现了Listener接口的抽象类,实现了接口中的方法(空实现),这样就不用在定义监听器时实现所有的方法, 只需要重写需要的处理事件的方法就可以了,比如窗口的适配器是WindowAdapter

 

常用的添加添加事件监听器的方法

Frame.addWindowListener(Listener lis)         给窗体添加事件的方法

button.addMouseListener(Listener lis)           给按钮添加鼠标点击事件监听器

textArea.addKeyListener(Listener lis)             给文本域添加键盘事件监听器

 

动作监听器

ActionListener 可以给事件源添加一个事件监听器,按钮, 鼠标都可以是事件源

 

其它组件类

MenuBar 菜单栏, MenuItem菜单项, Menu 菜单, Dialog对话框

FramesetMenuBar方法可以将菜单栏添加到frame

 

代码应用-模拟Window记事本

package cn.itcast.gui.exercise;

import java.awt.FileDialog;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;

public class Notepad extends Frame {

	private static final long serialVersionUID = 1L;

	private MenuItem openMenuItem; // 由于多个方法中都要使用, 所以定义为成员变量
	private MenuItem saveMenuItem;
	private MenuItem exitMenuItem;
	private MenuItem gbkMenuItem;
	private MenuItem utf8MenuItem;

	private TextArea textArea;

	private String encoding = "GBK";

	private File file;

	public Notepad() {
		initFrame(); // 初始化窗体
		generateMenuBar(); // 构建菜单栏
		generateTextArea(); // 构建文本域
		addListener(); // 添加监听器
		setVisible(true); // 设置可见
	}

	private void initFrame() {
		setTitle("记事本");
		setSize(600, 400);
		setLocation(600, 100);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	private void generateMenuBar() {
		MenuBar menuBar = new MenuBar(); // 菜单栏

		Menu fileMenu = new Menu("文件"); // 菜单
		Menu editMenu = new Menu("编辑");
		Menu searchMenu = new Menu("查看");

		openMenuItem = new MenuItem("打开"); // 菜单项
		saveMenuItem = new MenuItem("保存");
		exitMenuItem = new MenuItem("退出");
		gbkMenuItem = new MenuItem("GBK");
		utf8MenuItem = new MenuItem("UTF-8");

		fileMenu.add(openMenuItem); // 把菜单项装入菜单
		fileMenu.add(saveMenuItem);
		fileMenu.add(exitMenuItem);
		searchMenu.add(gbkMenuItem);
		searchMenu.add(utf8MenuItem);

		menuBar.add(fileMenu); // 把菜单添加到菜单栏
		menuBar.add(editMenu);
		menuBar.add(searchMenu);

		setMenuBar(menuBar); // 把菜单栏添加到Frame
	}

	private void generateTextArea() {
		textArea = new TextArea();
		textArea.setFont(new Font("Courier New", Font.PLAIN, 15)); // 设置字体
		add(textArea); // 添加到窗体
	}

	private void addListener() {
		openMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				open();
			}
		});

		saveMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				save();
			}
		});

		exitMenuItem.addActionListener(new ActionListener() { // 给菜单项添加动作监听器
					public void actionPerformed(ActionEvent e) {
						System.exit(0); // 被点击的时候退出
					}
				});

		textArea.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_O) // 按下Ctrl,
																			// 并且按了O
					open();
				if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S) // Ctrl
																			// +
																			// S
					save();
			}
		});

		gbkMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				encoding = "GBK"; // 修改码表
				loadFile(file); // 重新读取文件
			}
		});

		utf8MenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				encoding = "UTF-8";
				loadFile(file);
			}
		});
	}

	private void open() {
		FileDialog dialog = new FileDialog(this, "打开", FileDialog.LOAD); // 创建对话框
		dialog.setVisible(true); // 显示
		String dir = dialog.getDirectory(); // 获取选中的路径
		String name = dialog.getFile(); // 获取选中的文件名
		if (dir != null && name != null) {
			file = new File(dir, name);
			loadFile(file);
		}
	}

	private void loadFile(File file) {
		try (FileInputStream fis = new FileInputStream(file); // 定义输入流指向文件
				ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 定义输出流指向内存
		) {
			byte[] buffer = new byte[1024];
			int len;
			while ((len = fis.read(buffer)) != -1)
				// 读取文件数据, 写到内存
				baos.write(buffer, 0, len);
			String content = new String(baos.toByteArray(), encoding); // 把内存中的数据转为String
			textArea.setText(content); // 设置TextArea中的文本为content
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void save() {
		FileDialog dialog = new FileDialog(this, "保存", FileDialog.SAVE);
		dialog.setVisible(true);
		String dir = dialog.getDirectory();
		String name = dialog.getFile();
		if (dir != null && name != null) {
			File file = new File(dir, name);
			try (FileWriter fw = new FileWriter(file)) {
				fw.write(textArea.getText()); // 获取TextArea中的文本, 写出到文件
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

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


 

你可能感兴趣的:(黑马程序员——GUI图形用户界面)