本文主要是介绍黑马程序员——GUI(3)菜单FileDialog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
总的来说,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|--Menumenu添加到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);}
}
这篇关于黑马程序员——GUI(3)菜单FileDialog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!