GUI

 

GUI
Graphical User Interface(图形用户接口)。
用图形的方式,来显示计算机操做的界面,这样更方便更直观。java

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

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

布局

常见的布局管理器:
FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中
Frame默认的布局管理器。
GridLayout(网格布局管理器)
规则的矩阵
CardLayout(卡片布局管理器)
选项卡
GridBagLayout(网格包布局管理器)
非规则的矩阵字体

简单的窗体建立过程:
Frame  f = new Frame(“my window”);
f.setLayout(new FlowLayout());    //设置布局管理器
f.setSize(500,400);    //设置窗体大小
f.setLocation(300,200);    //设置窗体出如今屏幕的位置
f.setIconImage(Toolkit.getDefaultToolkit().createImage("qq.png"));
Button button = new Button("我是一个按钮");
f.add(button);
f.setVisible(true);

 

事件监听机制ui

肯定事件源(容器或组件)
经过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
通常用匿名内部类来表示。
在覆盖方法的时候,方法的参数通常是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。经过getSource()或者,getComponent()获取。)this

窗口事件关闭窗体spa

Frame f = new Frame("个人窗体");
//事件源是窗体,把监听器注册到事件源上
//事件对象传递给监听器
f.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
                     //退出虚拟机,关闭窗口
		System.exit(0);
	}
});

窗口中按钮关闭窗体orm

Button button = new Button("我是按钮");
//事件源是按钮,给按钮注册监听器
button2.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
		System.exit(0);
	}
});

鼠标监听器(MouseListener)对象

 void mouseClicked(MouseEvent e)
          鼠标按键在组件上单击(按下并释放)时调用。
 void mouseEntered(MouseEvent e)
          鼠标进入到组件上时调用。
 void mouseExited(MouseEvent e)
          鼠标离开组件时调用。
 void mousePressed(MouseEvent e)
          鼠标按键在组件上按下时调用。
 void mouseReleased(MouseEvent e)
          鼠标按钮在组件上释放时调用。

简单的记事本程序

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 open;
	private MenuItem save;
	private MenuItem quit;
	private TextArea ta;
	
	public Notepad() {
		init();
		menubar();
		textArea();
		event();
	}
	
	private void init() {
		this.setSize(300, 400);			//设置窗体大小
		this.setLocation(500, 100);		//设置窗体的位置
		this.setVisible(true);			//设置窗体显示
	}
	
	private void menubar() {
		MenuBar mb = new MenuBar();		//建立菜单栏
		Menu file = new Menu("文件");		//建立菜单
		open = new MenuItem("打开");
		save = new MenuItem("保存");
		quit = new MenuItem("退出");
		
		this.setMenuBar(mb);			//将菜单栏添加到窗体上
		mb.add(file);					//将菜单添加到菜单栏上
		file.add(open);					//将菜单项添加到菜单上
		file.add(save);
		file.add(quit);
		
	}
	
	private void textArea() {
		ta = new TextArea();
		ta.setFont(new Font("Courier New", Font.PLAIN, 20));	//设置字体(字体名字,字体样式,字体大小)
		this.add(ta);					//将文本区域添加到窗体上
	}
	
	private void event() {
		this.addWindowListener(new WindowAdapter() {	//关闭窗体
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		open.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				open();
			}
		});
		
		save.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				save();
			}
		});
		
		quit.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		
		ta.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {	//键盘释放
				if(e.getKeyCode() == KeyEvent.VK_O && e.isControlDown())
					open();
			}
		});
		
		ta.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				if(e.getKeyCode() == KeyEvent.VK_S && e.isControlDown())
					save();
			}
		});
	}
	
	private void open() {
		FileDialog fd = new FileDialog(this, "打开", FileDialog.LOAD);	//建立对话框对象,并指定模式
		fd.setVisible(true);				//显示对话框
	
		String dir = fd.getDirectory();		//获取对话框的目录
		String file = fd.getFile();			//获取对话框的文件名
		if(dir != null && file != null){
			loadFile(new File(dir,file));	//读取文件
		}
	}
	
	private void loadFile(File file) {
		try (
			FileInputStream fis = new FileInputStream(file);	//读文件的读取流
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
		){
			int len;
			byte[] arr = new byte[1024];
			while((len = fis.read(arr))!= -1) {
				baos.write(arr, 0, len);
			}
			byte[] arr2 = baos.toByteArray();
			String message = new String(arr2);
			ta.setText(message);
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	
	private void save() {
		FileDialog fd = new FileDialog(this, "保存", FileDialog.SAVE);
		fd.setVisible(true);
		
		String dir = fd.getDirectory();
		String file = fd.getFile();
		if(dir != null && file != null) {
			saveFile(new File(dir,file));
		}
	}
	
	private void saveFile(File file) {
		try(
			FileWriter fw = new FileWriter(file);	//将文本的内容写到指定的文件上
		){
			String message = ta.getText();			//获取文本区域中的内容
			fw.write(message);						//将文本区域的内容写出去
		}catch(IOException e) {
			
		}
	}
	public static void main(String[] args) {
		new Notepad();
	}

}
相关文章
相关标签/搜索