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

来源:互联网 发布:袁隆平 诺贝尔奖 知乎 编辑:程序博客网 时间:2024/04/30 03:35
------- 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选择的文件信息时,一定要先判断目录和文件是否能获取到,因为有时候打开对话框可能会不选择文件而关闭。

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


练习:

/*MenuBarMenuItem  |--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