总的来说,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);
}
}