实现菜单程序的一些关键的地方和思路总结

来源:互联网 发布:如何查苹果手机mac地址 编辑:程序博客网 时间:2024/06/06 01:53

整体思路构架:

首先 GUI就是一堆对象 你首先需要做的就是调用他们 让它们出现 但这些对象是死的 你只能把他们搞出来看看 但点的话没反应

其次 让他们活起来就是把事件的监听和反应附上去 这样一个活生生的东西就搞出来了

而这一点是难点


细分思路:

首先 一个GUI对象主要就是两点:位置和大小 至于具体长什么样 都是java给设定好的 我们不用管

其次 需要知道所有GUI的是什么样子的 比较容易混的就是菜单栏那些东西:

最后 附到控件上很简单 但要着重把事件处理好:

这个事件 java的原理是:如何侦测到事件的不要你管 你就只管事件发生了以后如何处理即可

而这个如何处理 就是覆盖相应的方法

主要就是显示和关闭

如果还需要一些读取写入的操作 就要引入io的相关方法 

记住:

MenuBar是开始插入页面布局引用邮件审阅试图加载项Acrobat那一行

Menu是开始或者插入或者页面布局或者…中的一个

MenuItem是剪贴板 字体 段落

 

其中Menu和MenuItem可以相互叠加(子菜单和菜单条目就是这么来的)


/*
需求:
玩儿一下Menu


*/


/**
这是一个自定义的菜单工具


@author Moriarty
@version V1.0


*/
package mymenu;


import java.awt.*;
import java.awt.event.*;
import java.io.*;


public class MenuDemo 
{
/**
主函数


*/
public static void main(String[] args) 
{
new MenuDemo();
}


private Frame f = new Frame("我就是你们的爹 窗体!");
private MenuBar mb = new MenuBar();
private Menu m1 = new Menu("菜单");
private MenuItem mitem1 = new MenuItem("打开");
private MenuItem mitem2 = new MenuItem("退出");
private MenuItem mitem3 = new MenuItem("保存");
private Menu m2 = new Menu("菜单另一个选项且有子菜单");
private FileDialog openfd = new FileDialog(f,"打开文件",FileDialog.LOAD);
private FileDialog savefd = new FileDialog(f,"保存文件",FileDialog.SAVE);

private TextArea ta = new TextArea();
/**
构造函数


*/
MenuDemo()
{
initiate();
}
/**
初始化


*/
public void initiate()
{
f.setBounds(400,200,500,500);
f.setLayout(new FlowLayout());
f.setMenuBar(mb);   //注意这个方法的名字 背住!
mb.add(m1);
m1.add(mitem1);
m1.add(mitem3);
m1.add(m2);  // 注意 menu对象的直接相互叠加 而不是menu叠加menuitem再叠加menu
m2.add(mitem2);
f.add(ta);


myEvent();
f.setVisible(true);
}
/**
事件和处理方式
*/
public void myEvent()
{
mitem1.addActionListener(new ActionListener() //注意这里是菜单选项的事件 
//不是文件对话框的事件!
{
public void actionPerformed(ActionEvent e)
{
sop("打开文件对话框被动了啊");
openfd.setVisible(true);


String path = openfd.getDirectory();
String fileName = openfd.getFile();


if ( path==null || fileName==null)
{
return;
}


ta.setText("");


File f = new File(path,fileName);


try
{
BufferedReader bufr = new BufferedReader(new FileReader(f));


String line = null;


while ((line = bufr.readLine())!=null)
{
ta.append(line+"\r\n");
}


bufr.close();
}
catch (IOException ex)
{
throw new RuntimeException("读取失败");
}
}
});


f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
sop("点击窗体右上方的按钮导致的窗体关闭");
System.exit(0);
}
});


mitem2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sop("用子菜单的关闭选项来关闭窗体");
System.exit(0);
}
});


mitem3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent exx)
{
sop("保存文件夹对话框被动了啊");
savefd.setVisible(true);

String dir = savefd.getDirectory();
String filename = savefd.getFile();


if (dir==null|| filename==null )
{
return ;
}


File f = new File(dir,filename);


try
{
BufferedWriter bufw = new BufferedWriter(new FileWriter(f));


String text = ta.getText();


bufw.write(text);


bufw.close();
}
catch (IOException exxx)
{
throw new RuntimeException("写入错误");
}
}
});
}
/**


专门用来打印
*/
public static void sop(Object obj)
{
System.out.println(obj);
}
}

0 0