山寨记事本总结常用的事件机制和文件输入输出方法

在Java中什么是swing?简单的说就是Java中包装好的并且规定好的用来做窗体UI的一套API;以下简单的介绍一下常用的swing组件。

1:JButton:代表Swing按钮,可以带一些图片或者文字;

2:JCheckBox:代表Swing组件的复选框组件;

3:JComBox:代表下拉列表框;可以在下拉显示区域显示多个选项;

4:JFrame:代表Swing框架类;

5:JDialog:代表Swing版本对话框;

6:JLabel:代表Swing中的标签组件;

7:JRadioButton:代表swing中的单选按钮;

8:JList:代表能够在用户界面中显示一系列条目组件;

9:JTextField:代表文本框;

10:JPaswordField:代表密码框;

11:JTextarea:代表swing中的文本区域;

12;JOptionPane:代表swring中的一些对话框;

常用的事件监听其实很好理解首先要明白什么是事件?什么是事件监听器?什么是事件源?
 事件:对于组件的任何一个操作:点击按钮,选中菜单项  鼠标移动,鼠标按下,键盘输入...

事件监听器:用来监听在某个组件上是否发生了对应的事件

事件源:发生事件的组件对象

理清了这三个因素以后,就明白,在哪里(事件源)发生事件则需要监听哪里,下面看一下最简单的山寨版记事本文件
山寨记事本总结常用的事件机制和文件输入输出方法
山寨记事本总结常用的事件机制和文件输入输出方法
 以下是实现部分功能的代码

package wenjiancaozuo;


import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;

/**
 * 界面类
 * 
 * @author wangwei
 * 
 */
public class NotePadUI {

	public static void main(String args[]) {

		// 创建界面
		JFrame jf = new JFrame();
		// 设置标题
		jf.setTitle("java记事本");
		// 设置初始大小
		jf.setSize(500,500 );
		

		// 设置点击关闭按钮的时候退出程序
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// 创建多行文本框
		JTextArea area = new JTextArea();
		//设置背景颜色
		area.setBackground(Color.PINK);
		
		// 添加菜单栏
		JMenuBar bar = new JMenuBar();

		// 创建事件监听器对象
		NotePadListener lis = new NotePadListener(area);

		String[] menus = { "文件(F)", "编辑(E)", "格式(O)", "查看(V)", "帮助(H)" };
		String[][] items = {
				{ "新建(N)", "打开(O)", "保存(S)", "另存为(A)", "-", "页面设置(U)","打印(P)", "-", "退出(X)" },
				{ "撤销(U)", "-", "剪切(T)", "复制(C)","查找(F)","替换(L)","删除(X)" }, {"自动换行","字体"},
				{"状态栏"}, {"查看帮助(H)","关于记事本(A)"} };

		// 每个菜单项的唯一标识
		String[][] commands = {
				{ "newFile", "open", "save", "saveAs", "-", "pageSet", "print",
						"-", "exit" }, { "withDraw", "-", "cut", "copy" ,"find","replace","delete"}, {"AUTO","char"},
				{"Status"}, {"help","with"} };

		// 循环创建JMenu,放在JMenuBar上
		for (int i = 0; i < menus.length; i++) {
			JMenu menu = new JMenu(menus[i]);
			bar.add(menu);
			for (int j = 0; j < items[i].length; j++) {
				if (items[i][j].equals("-")) {
					// 就加入分隔条
					menu.addSeparator();

				} else {
					JMenuItem item = new JMenuItem(items[i][j]);
					// 设置菜单项的唯一标识(动作命令)
					item.setActionCommand(commands[i][j]);

					// 将菜单项加载对应的菜单上
					menu.add(item);
					// 给菜单项绑定监听器
					item.addActionListener(lis);
				}
			}

		}

		// 设置窗体的菜单
		jf.setJMenuBar(bar);

	

		// 滚动面板,将多行文本框放到滚动面板面板中
		JScrollPane sp = new JScrollPane(area);
		// 设置一直显示滚动条并且在什么时候可见设置为always
		
		sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		//添加在窗体上
		jf.add(sp);
		//设置窗体可见

		jf.setVisible(true);
		
		
		
	}

	}

 


 

package wenjiancaozuo;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import javax.swing.JTextArea;

public class NotePadListener implements ActionListener{
	private JTextArea area;
	//通过构造方法传值过来
	public  NotePadListener(JTextArea area){
		this.area=area;
		
	}

	
	

   //通过事件触发自动调用
	public void actionPerformed(ActionEvent e) {
		//获得被选中的菜单项目的动作命令
		String command =e.getActionCommand();
		if(command.equals("save")){
		//获得多行文本框的数据
			//得到文本框内容
			
			String  str =area.getText();
			String path = "F:\\aba\\d.txt";
			try{
				FileOutputStream fos = new FileOutputStream(path);
				//这里写入的数据很可以用字节数组来写入
				//获得字节数组
				byte[] bs =  str.getBytes();
				fos.write(bs);
				fos.flush();
				fos.close();
				
			}catch(Exception ef){
				ef.printStackTrace();
			}
			
		}else if(command.equals("open")){
			String path1 = "F:\\aba\\d.txt";
			try{
				FileInputStream fis = new FileInputStream(path1);
				//文件比较小所以用获取流的长度来实现
				int Len = fis.available();
				//流中有多大字节就定义多大数组
				byte[] bs = new byte[Len];
				//将流中字节读入数组
				fis.read(bs);
				//将字节数转换成字符串
				String mg = new String(bs);
				
				area.setText(mg);
			}catch(Exception ef){
				ef.printStackTrace();
			}
		}
		
	}

}

 以上是山寨版的简单的记事本,也只是实现了部分功能,主要通过小程序来说明以下swing组件的部分简单的用法和回顾以下IO流
 

 

 

你可能感兴趣的:(事件机制)