黑马程序员——GUI(3)菜单&FileDialog

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

总的来说,Memu建立在Menubar上,MenuItem建立在Menu上。

如果想给一个程序增加一个菜单条,就需要新建一个Menubar,然后再在Menubar上编辑菜单。

一个Menubar上可以有多个Menu,每个Menu上可以添加MenuItem也就是菜单项,或者是添加一个子菜单Menu,形成多级菜单。


注意:其他组件,以及Menu和MenuItem。添加使用的是add方法,但是MenuBar添加到窗体使用的是setMenuBar(MenuBar mb);

=======================================================================================

FileDialog是Dialog的子类,继承了其特点,但是可以通过FileDialog选择一个文件位置,以便之后打开或者保存。

1.创建:

FileDialog f=new FileDialog(frmBase,mode);//mode指示这个文件对话框是打开还是保存文件

FileDialog.SAVE

FileDialog.LOAD

2.获取文件信息(为什么Dialog没有类似的方法!)

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

3.注意事项:

if(null==fd.getDirectory()||null==fd.getFile())
return;
fText=new File(fd.getDirectory(),fd.getFile());

在获取FileDialog选择的文件信息时,一定要先判断目录和文件是否能获取到,因为有时候打开对话框可能会不选择文件而关闭。

如果不先判断则第二句就会异常了。


练习:

/*
MenuBar
MenuItem
  |--Menu
  
  menu添加到menubar上
  menuitem添加到menu上
  子菜单即是一组菜单项的集合。可以添加在菜单上,形成多级菜单


*/
package test;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class MenuDemo
{
	private Frame f;
	private MenuBar mb;
	private Menu mRoot;
	private MenuItem miOpen,miSave,miSaveAs,miClose;
	private TextArea taEditArea,taStatus;
	private Label l;
	private File fText;	
	
	MenuDemo()
	{
		wndInit();		
	}
	
	private void wndInit()
	{
		f=new Frame("Menu Demo");
		f.setBounds(300,200,600,500);
		//f.setLayout(new FlowLayout());
		regfListener();
			//新建一个菜单条
			mb=new MenuBar();
				//新建一个菜单
				mRoot=new Menu("File");
				mb.add(mRoot);
					//新建一个菜单项
					miOpen=new MenuItem("Open");
					mRoot.add(miOpen);
					regmiOpenListner();
					
					miSave=new MenuItem("Save");
					mRoot.add(miSave);
					regmiSaveListner();

					miSaveAs=new MenuItem("SaveAs");
					mRoot.add(miSaveAs);
					regmiSaveAsListner();

					
					Menu mSublv1=new Menu("Menu Lv1");
					mRoot.add(mSublv1);
					
						MenuItem milv1Item1 =new MenuItem("MenuItem Lv1 1");
						mSublv1.add(milv1Item1);
						MenuItem milv1Item2 =new MenuItem("MenuItem Lv1 2");
						mSublv1.add(milv1Item2);
						Menu mSublv2=new Menu("Menu Lv2");
						mSublv1.add(mSublv2);
						
							MenuItem milv2Item1 =new MenuItem("MenuItem Lv2 1");
							mSublv2.add(milv2Item1);	
							
					miClose=new MenuItem("Close");
					mRoot.add(miClose);
					regmiCloseListner();
					
			//f.add(mb);
			/*框架添加菜单不是用add方法,而是
			setMenuBar(MenuBar )			
			*/
			f.setMenuBar(mb);
			
			
			taEditArea=new TextArea();
			f.add(taEditArea,BorderLayout.CENTER);			
			//添加一个文本区做状态栏,显示当前打开的文件
			//taStatus=new TextArea(null,0,0,TextArea.SCROLLBARS_NONE);
			//f.add(taStatus,BorderLayout.SOUTH);
			
			l=new Label();
			f.add(l,BorderLayout.SOUTH);
		f.setVisible(true);	
	}
	
	
	private void regfListener()
	{
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				newPrint("windowClosing!");
				System.exit(0);
			}
			
		});
	}
	
	private void regmiCloseListner()
	{
		miClose.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				newPrint("closed by Button:miClose");
				System.exit(0);
			}
		});
	}
	
	private void regmiOpenListner()
	{
		miOpen.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				/*public FileDialog(Frame/Dialog ,String ,int mode)
				
				mode:FileDialog.LOAD  FileDialog.SAVE
				
				*/				
				
				FileDialog fd=new FileDialog(f,"OPEN",FileDialog.LOAD);
				fd.setVisible(true);
				
				//在获取FileDialog选择的文件信息时,一定要先判断目录和文件是否能获取到,因为有时候打开对话框可能会不选择文件而关闭。
				//如果不先判断则第二句就会异常了。
				if(null==fd.getDirectory()||null==fd.getFile())
					return;
				fText=new File(fd.getDirectory(),fd.getFile());						
				newPrint("going to open the file: "+fText.toString());
				showFile(fText);
			}
		});
	}
	private void showFile(File fText)
	{
		l.setText(fText.toString());
		taEditArea.setText("");
		
		try
		{
			BufferedReader bin=new BufferedReader(new FileReader(fText));
			String tmpLine=null;
			while(null!=(tmpLine=bin.readLine()))
			{
				taEditArea.append(tmpLine+"\r\n");
			}
			bin.close();	
		}
		catch(IOException ioe)
		{
			
		}		
	}	
	
	private void regmiSaveListner()
	{
		miSave.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{				
				if(null==fText)
				{
					
					if(!setSaveFilePath())
						return;		
				}				
				newPrint("going to save the file at: "+fText.toString());
				saveFile(fText);				
			}			
		});
	}	
	private void regmiSaveAsListner()
	{
		miSaveAs.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{				
				if(!setSaveFilePath())
					return;				
				newPrint("going to save the file at: "+fText.toString());
				saveFile(fText);				
			}			
		});
	}
	private Boolean setSaveFilePath()
	{
		FileDialog fd=new FileDialog(f,"SAVE",FileDialog.SAVE);				
		fd.setVisible(true);	
		
		if(null==fd.getDirectory()||null==fd.getFile())
		{
			newPrint("here2");
			return false;
		}
			
		fText=new File(fd.getDirectory(),fd.getFile());			
		return true;
	}
	private void saveFile(File fText)
	{
		try
		{
			BufferedWriter bout=new BufferedWriter(new FileWriter(fText));
			
			bout.write(taEditArea.getText());	
			
			bout.close();
			
		}
		catch(IOException e)
		{
			
		}				
	}
	
	public static void main(String[] args)
	{
		new MenuDemo();
		newPrint("console thread");
		
	}
	public static void newPrint(Object obj)
	{
		System.out.println(obj);
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值