Menu中既可以添加Menu,也可以添加MenuItem
注意menu:可添加在menubar中或者menu中(添加在menu中形成子菜单)
menuItem:添加在menue中
menubar:添加在Frame中
需求:建立如下窗体,并实现菜单的功能
MenuItem:类中有监听器:public void addActionListener(ActionListener l),所以MenueItem以及其子类都可以用此监听器
import java.awt.*;
import java.awt.event.*;
public class MyMenueDemo {
private Frame f;
private MenuBar mb;
private Menu m,subMenu;
private MenuItem closeItem,subItem;
MyMenueDemo(){
init();
}
public void init() {
f=new Frame("my Window");
f.setBounds(300, 100, 500, 600);
f.setLayout(new FlowLayout());
mb=new MenuBar();
m=new Menu("文件");
subMenu=new Menu("子菜单");
subItem=new MenuItem("子菜单项");
closeItem=new MenuItem("退出");
subMenu.add(subItem);
m.add(subMenu);
m.add(closeItem);
mb.add(m);
f.setMenuBar(mb);
myEvent();
f.setVisible(true);
}
public void myEvent() {
closeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
需求:希望能够创建一个“打开”对话框,就像word–>文件—>打开,弹出的对话框一样。
在Dialog子类FileDialog就可以实现这个功能(调用window窗口),方便了变成开发。
FileDialog类显示一个对话框窗口,用户可以从中选择文件。
public FileDialog(Frame parent,String title, int mode):根据mode的选取不同可以打开文件或者保存文件
TextArea类中
public void append(String str)将给定文本追加到文本区的当前文本。
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenueDemo {
private Frame f;
private MenuBar bar;
private TextArea ta;
private Menu fileMenu;
private MenuItem closeItem,openItem,saveItem;
private FileDialog openDia,saveDia;
private File file;
MyMenueDemo(){
init();
}
public void init() {
f=new Frame("my Window");
f.setBounds(300, 100, 500, 600);
//不设置布局,默认四周式,只有一个组件TextArea ,会显示整个窗体,也比较合理
bar=new MenuBar();
fileMenu=new Menu("文件");
closeItem=new MenuItem("退出");
openItem=new MenuItem("打开");
saveItem=new MenuItem("保存");
ta=new TextArea();
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu);
f.setMenuBar(bar);
f.add(ta);
openDia=new FileDialog(f,"我要打开",FileDialog.LOAD);
saveDia=new FileDialog(f,"我要保存",FileDialog.SAVE);
myEvent();
f.setVisible(true);
}
public void myEvent() {
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openDia.setVisible(true);
String str=openDia.getFile();//获取选中的文件名称
String dir=openDia.getDirectory();//获取目录
if(str==null||dir==null)//用户不想打开文件
return;
ta.setText("");//将之前的文件的文本删除
file=new File(dir,str);
BufferedReader br=null;
try
{
//将硬盘上的文件内容写到文本区域中
br=new BufferedReader(new FileReader(file));
String len=null;
try
{
while((len=br.readLine())!=null)
{
ta.append(len+"\r\n");
}
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
finally
{
try
{
br.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}
});
closeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
saveItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(file==null)
{
saveDia.setVisible(true);
String str=saveDia.getFile();
String dir=saveDia.getDirectory();
System.out.println(dir+"------------"+str);//用户文件保存位置
if(dir==null||str==null)//新写的文件没保存
return ;
file=new File(dir,str);
}
BufferedWriter bufw=null;
try
{
bufw=new BufferedWriter(new FileWriter(file));
String text=ta.getText();//从文本区域中获取数据,写入文件中
bufw.write(text);
bufw.flush();
}
catch (IOException e1)
{
throw new RuntimeException("没这文件");
}
finally{
try
{
bufw.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}
});
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}