JAVA--GUI:MenuBar与FileDialog组件,案例:仿写简易文本编辑器

常用方法

FileDialog 类显示一个对话框窗口,用户可以从中选择文件。

FileDialog(Frame parent, String title, int mode):创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。

       参数:

              parent - 对话框的所有者

              title - 对话框的标题

              mode - 对话框的模式,可以是 FileDialog.LOAD 或 FileDialog.SAVE

String getDirectory():获取此文件对话框的目录。

String getFile():获取此文件对话框的选定文件。

File(String parent, String child):根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

编码

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MenuTest{
 
	 // 初始化组件
	 private Frame f;
	 private MenuBar bar;
	 private TextArea ta;
	 private Menu fileMenu;
	 private MenuItem openItem,saveItem,closeItem;
	 // 选择对话框组件
	 private FileDialog openDia,saveDia;
	 
	 private File file;
	 
	 MenuTest(){
		init();	// 页面初始化
	 }
	 
	 public void init(){
		  f=new Frame("我的简易记事本");
		  f.setBounds(300,100,650,600);
		  
		  bar=new MenuBar();	// 菜单栏
		  
		  ta=new TextArea();	// 文本域
		  
		  fileMenu =new Menu("文件");	// 菜单
		  
		  openItem=new MenuItem("打开");	// 菜单项
		  saveItem=new MenuItem("保存");	// 菜单项
		  closeItem=new MenuItem("退出");	// 菜单项
		  
		  fileMenu.add(openItem);	// 把菜单项添加到菜单中
		  fileMenu.add(saveItem);	// 把菜单项添加到菜单中
		  fileMenu.add(closeItem);	// 把菜单项添加到菜单中
		  bar.add(fileMenu);	// 把菜单添加到菜单栏中
		  
		  f.setMenuBar(bar);
		  
		  // 初始化选择对话框
		  openDia=new FileDialog(f,"我要打开",FileDialog.LOAD);
		  saveDia=new FileDialog(f,"我要保存",FileDialog.SAVE);
		  
		  f.add(ta);	// 添加文本域到窗口
		  
		  myEvent();	// 加载事件
		  
		  f.setVisible(true);
	 }
	 public void myEvent(){
		 saveItem.addActionListener(new ActionListener(){	// 菜单"保存"按钮点击事件
			 public void actionPerformed(ActionEvent e){
				 saveDia.setVisible(true);	// 打开保存选择对话框
				 String dirPath=saveDia.getDirectory();
				 String fileName=saveDia.getFile();
				 // System.out.println(dirPath+"..."+fileName);
				 if(dirPath==null || fileName==null)
					 return;
				 file=new File(dirPath,fileName);
				 
				 try{
					 // 写入文件
					 BufferedWriter bufw=new BufferedWriter(new FileWriter(file));
					 String text=ta.getText();	// 获取文本域文本
					 
					 bufw.write(text);
					 // bufw.flush();	// 刷新缓冲区
					 
					 bufw.close();	// 关闭写入流
				 }catch(IOException ex){
					 throw new RuntimeException("写入失败!");
				 }
			 }
		 });
		 openItem.addActionListener(new ActionListener(){	// 菜单"打开"按钮点击事件
			 public void actionPerformed(ActionEvent e){
				 openDia.setVisible(true);	// 打开读取选择对话框
				 String dirPath=openDia.getDirectory();
				 String fileName=openDia.getFile();
				 // System.out.println(dirPath+"..."+fileName);
				 if(dirPath==null || fileName==null)
					 return;
				 
				 ta.setText("");
				 file=new File(dirPath,fileName);
				 
				 try{
					 // 读取源文件
					 BufferedReader bufr=new BufferedReader(new FileReader(file));
					 String line=null;
					 while((line=bufr.readLine())!=null){
						 ta.append(line+"\r\n");	// 写到文本域组件中
					 }
					 
					 bufr.close();	// 关闭读取流
				 }catch(IOException ex){
					 throw new RuntimeException("读取失败!");
				 }
			 }
		 });
		 closeItem.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 MenuTest();
	 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现了记事本的大部分功能,适合新手看。 // 文本编辑区 private JTextArea editArea = new JTextArea(); // 菜单项 private JMenu[] menus = { new JMenu("文件(F)"), new JMenu("编辑(E)"), new JMenu("格式(E)"), new JMenu("查看(V)"), new JMenu("帮助(H)") }; private JMenuItem[] fileMenu = { new JMenuItem("新建(N) "), new JMenuItem("打开(O)... "), new JMenuItem("保存(S) "), new JMenuItem("另存为(A)... "), new JMenuItem("页面设置(U)... "), new JMenuItem("打印(P)... "), new JMenuItem("退出(X) ") }; private JMenuItem[] editMenu = { new JMenuItem("撤销(U) "), new JMenuItem("剪切(T) "), new JMenuItem("复制(C) "), new JMenuItem("黏贴(P) "), new JMenuItem("删除(L) "), new JMenuItem("查找(F)... "), new JMenuItem("查找下一个(N) "), new JMenuItem("替换(R)... "), new JMenuItem("转到(G)... "), new JMenuItem("全选(A) "), new JMenuItem("时间/日期(D) ") }; private JCheckBoxMenuItem formatMenu1 = new JCheckBoxMenuItem( "自动换行(W) "); private JMenuItem formatMenu2 = new JMenuItem("字体(F)... "); private JMenuItem checkMenu = new JMenuItem("状态栏(S) "); private JMenuItem[] helpMenu = { new JMenuItem("查看帮助(H) "), new JMenuItem("关于记事本(A) ") }; private JPopupMenu pmenus = new JPopupMenu(); private JMenuItem[] popupMenu = { new JMenuItem("撤销(U) "), new JMenuItem("剪切(T) "), new JMenuItem("复制(C) "), new JMenuItem("黏贴(P) "), new JMenuItem("删除(L) "), new JMenuItem("全选(A) "), }; // 剪切板引用 private Toolkit toolKit = Toolkit.getDefaultToolkit(); private Clipboard clipBoard = toolKit.getSystemClipboard(); // 其他变量 private boolean isNewFile = true; private File currentFile; private String oldTxt; // 撤销管理器 private UndoManager undo = new UndoManager(); private UndoableEditListener undoHandler = new UndoHandler();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值