程序如下,本人现在想当单击“字体”菜单条时,弹出设置字体、字号、颜色的对话框,单击“帮助主题”和“关于记事本”时也弹出对话框显示相应的内容。我用的是neatbean 5.0
import java.awt.*;
import java.awt.event.*;
public class notePad
{
public static void main(String args[])
{
mainFrame mf=new mainFrame();
mf.setSize(500,400);
mf.setLocation(100,100);
}
}
class mainFrame extends Frame implements ActionListener,ItemListener,TextListener
{ /*定义Frame类的子类mainFrame类,这个类需要实现ActionListener、ItemListener和
TextLestener接口 */
String FileName; //定义用于保存文件名的变量
String CopyText; //定义用于保存复制、粘贴的临时变量
boolean HasSave=true; //用于标识文本内容是否已经被保存
int trigerSource; //标识单击哪个按钮触发“是否保存文件”的弹出窗口
Panel ConP=new Panel(); //创建菜单棒
MenuBar mb=new MenuBar(); //下面的语句是创建菜单项
Menu mFile=new Menu("文件");
Menu mEdit=new Menu("编辑");
Menu mStyle=new Menu("格式");
Menu mHelp=new Menu("帮助");
//下面的语句是创建菜单条目,并给一些条目定义快捷方式按钮
MenuItem miFNew=new MenuItem("新建",new MenuShortcut('n'));
MenuItem miFOpen=new MenuItem("打开",new MenuShortcut('o'));
MenuItem miFSave=new MenuItem("保存",new MenuShortcut('s'));
MenuItem miFExit=new MenuItem("退出",new MenuShortcut('x'));
MenuItem miSFont=new MenuItem("字体...");
MenuItem miECut=new MenuItem("剪切",new MenuShortcut('c'));
MenuItem miECopy=new MenuItem("复制",new MenuShortcut('p'));
MenuItem miEPaste=new MenuItem("粘贴",new MenuShortcut('c'));
MenuItem miEDelete=new MenuItem("删除",new MenuShortcut('l'));
MenuItem miESelectAll=new MenuItem("全选",new MenuShortcut('a'));
MenuItem miHTitle=new MenuItem("帮助主题");
MenuItem miHAbout=new MenuItem("关于记事本");
CheckboxMenuItem miSRead=new CheckboxMenuItem("只读");
//这是检查框类型的菜单条目,即这个菜单条可以被选中也可以被撤消选中
TextArea WriteCon=new TextArea();
//定义文本区域,实现文字的输入
FileDialog OFDialog=new FileDialog(this,"打开文件");
//定义打开文件的对话框
FileDialog SFDialog=new FileDialog(this,"保存文件");
//定义保存文件的对话框
Label mesLabel=new Label(FileName+"文件的文字已经被改变,");
Label mesLabel2=new Label("想保存文件吗?");
//定义是否保存文件的对话框显示文字
Panel mesPanel=new Panel();
Panel mesPanel1=new Panel();
//下面语句定义询问是否保存的对话框及其相应的现实按钮
Button SaveOK=new Button("是(Y)");
Button SaveNO=new Button("否(N)");
Button SaveCancel=new Button("取消");
Dialog mesDialog=new Dialog(this,"询问窗口",true);
mainFrame()
{
FileName="新建文本文件";
//将文件名显示在Frame的标题上
setTitle(FileName);
/*以下语句用于注册各个对象需要监听的事件 */
miFNew.addActionListener(this);
miFOpen.addActionListener(this);
miFSave.addActionListener(this);
miFExit.addActionListener(this);
miECut.addActionListener(this);
miECopy.addActionListener(this);
miEPaste.addActionListener(this);
miEDelete.addActionListener(this);
miESelectAll.addActionListener(this);
miHTitle.addActionListener(this);
miHAbout.addActionListener(this);
miSRead.addItemListener(this);
miSFont.addActionListener(this);
SaveOK.addActionListener(this);
SaveNO.addActionListener(this);
SaveCancel.addActionListener(this);
WriteCon.addTextListener(this);
//注册记事本编辑区域文本内容改变的监听
addWindowListener(new closeWindow());
/*这个语句是注册关闭Frame窗口的监听事件,只是它不从Frame创建的对象实现监听,
而是从WindowAdapter类创建的对象实现监听,这少了许多累赘的工作*/
miEPaste.setEnabled(false);
//设置“粘贴”菜单条不可用,因为在没有复制之前不能实现粘贴
//下面的语句将菜单项加到菜单棒上,将菜单条加到菜单项上
mb.add(mFile);
mb.add(mEdit);
mb.add(mStyle);
mb.add(mHelp);
mFile.add(miFNew);
mFile.add(miFOpen);
mFile.add(miFSave);
mFile.addSeparator();
mFile.add(miFExit);
mEdit.add(miECut);
mEdit.add(miECopy);
mEdit.add(miEPaste);
mEdit.add(miEDelete);
mEdit.addSeparator();
mEdit.add(miESelectAll);
mStyle.add(miSRead);
mStyle.add(miSFont);
mHelp.add(miHTitle);
mHelp.add(miHAbout);
setMenuBar(mb); //设置Frame的菜单棒为mb
ConP.setBackground(new Color(200,200,200));
add(ConP);
ConP.setLayout(new BorderLayout());
ConP.add(WriteCon,"Center");
OFDialog.setLocation(130,150);
SFDialog.setLocation(130,150);
//设置打开文件和保存文件两个对话框的显示位置
mesDialog.setLayout(new BorderLayout());
mesLabel.setAlignment(1);
mesLabel2.setAlignment(1);
mesPanel.add(SaveOK);
mesPanel.add(SaveNO);
mesPanel.add(SaveCancel);
mesPanel1.add(mesLabel);
mesPanel1.add(mesLabel2);
mesDialog.add(mesPanel1,"Center");
mesDialog.add(mesPanel,"South");
mesDialog.setSize(250,120);
mesDialog.setLocation(200,250);
show();
}
class closeWindow extends WindowAdapter
{ /* 在mainFrame类中定义用于响应关闭窗口事件的类,使它成为WindowAdapter的子类*/
public void windowClosing(WindowEvent e)
{ //实现处理窗口关闭事件的方法windowClosing()
if(getTitle().indexOf("*")!=-1)
{ //当要关闭窗口如果文本内容改变了并没有保存,则显示是否保存窗口
trigerSource=0; //赋值触发保存窗口提示的事件源
mesLabel.setText(FileName+"文件的文字已经被改变,");
mesDialog.show();
}
else
{ //如果文本内容没有改变,则直接关闭窗口
dispose();
System.exit(0);
}
}
}
public void actionPerformed(ActionEvent e) //定义菜单响应事件
{
if(e.getSource()==miFExit)
{ //单击关闭菜单条
if(! HasSave)
{ //文件没保存则先提示是否保存文件
trigerSource=0;
mesLabel.setText(FileName+"文件的文字已经被改变,");
mesDialog.show();
}
else
{ //退出系统
dispose();
System.exit(0);
}
}
else if(e.getSource()==miFNew)
{ //单击新建菜单条
if(! HasSave)
{
trigerSource=1;
mesLabel.setText(FileName+"文件的文字已经被改变,");
mesDialog.show();
}
else
{
resetNote(); //新建文本
}
}
else if(e.getSource()==miFOpen)
{ //单击打开文件菜单条
if(! HasSave)
{
trigerSource=2;
mesLabel.setText(FileName+"文件的文字已经被改变,");
mesDialog.show();
}
else
{
OpenFile(); //打开文件
}
}
else if(e.getSource()==miFSave)
{
SaveFile(); //保存文件
}
else if(e.getSource()==miECut)
{ //剪切选中文本
CopyText=WriteCon.getSelectedText(); //将选中的文本保存到CopyText变量中
WriteCon.replaceText("",WriteCon.getSelectionStart(),WriteCon.getSelectionEnd());
//删除选中的文本
WriteCon.select(WriteCon.getSelectionStart(),WriteCon.getSelectionStart());
//设置使得文本没有被选中
miEPaste.setEnabled(true);
//设置粘贴菜单条为可用状态
}
else if(e.getSource()==miECopy)
{ //复制文本
CopyText=WriteCon.getSelectedText(); //将选中的文本保存到CopyText变量中
miEPaste.setEnabled(true); //设置粘贴菜单条为可用状态
}
else if(e.getSource()==miEPaste)
{ //粘贴文本
WriteCon.replaceText("",WriteCon.getSelectionStart(),WriteCon.getSelectionEnd());
//如果有文本被选中,先删除这段文本
WriteCon.insertText(CopyText,WriteCon.getCaretPosition());
//将文本插入到光标处
}
else if(e.getSource()==miEDelete)
{ //删除文本
WriteCon.replaceText("",WriteCon.getSelectionStart(),WriteCon.getSelectionEnd());
WriteCon.select(WriteCon.getSelectionStart(),WriteCon.getSelectionStart());
//设置使得文本没有被选中
}
else if(e.getSource()==miESelectAll)
{ //选中所有文本
WriteCon.selectAll();
}
else if(e.getSource()==SaveOK)
{ //当单击保存对话框中的“是”按钮时,实行保存操作
if(SaveFile())
DealDialog();
else
mesDialog.dispose(); //关闭保存提示对话框
}
else if(e.getSource()==SaveNO)
{ //当单击保存对话框中的“否”时,执行相应操作
DealDialog();
}
else if(e.getSource()==SaveCancel)
{ //当单击保存对话框中的“取消”时,关闭保存提示对话框
mesDialog.dispose();
}
}
public void textValueChanged(TextEvent e)
{ //当文本内容改变时
if(e.getSource()==WriteCon)
{ //将显示在窗口上的标题加“*”
if(getTitle().indexOf("*")==-1)
setTitle(getTitle()+"*");
HasSave=false;
}
}
public void DealDialog()
{ //处理保存提示对话框的方法
mesDialog.dispose(); //关闭对话框
if(trigerSource==0) //如果是关闭系统事件触发的,则退出系统
System.exit(0);
else if(trigerSource==1) //如果是新建文本文件事件触发的,则执行resetNote()
resetNote();
else if(trigerSource==2) //如果是打开文件事件触发的,则执行OpenFile();
OpenFile();
}
void resetNote()
{
WriteCon.setText("");
HasSave=true;
FileName="新建文本文件";
setTitle(FileName);
miSRead.setState(false);
}
void OpenFile()
{
OFDialog.show();
/*这里编写打开文件并读取文件的操作*/
FileName=OFDialog.getFile();
}
public void itemStateChanged(ItemEvent e) //定义复选框菜单响应事件
{
if(e.getSource()==miSRead)
if(((CheckboxMenuItem)(e.getSource())).getState())
WriteCon.setEditable(false); //将文本区域设置成不可编辑状态
else
WriteCon.setEditable(true); //将文本区域设置成不可编辑状态
}
boolean SaveFile()
{
String tmpFileName=FileName;
String Obj1="null";
if(! HasSave)
{ //如果需要保存,则执行保存语句
if(FileName.compareTo("新建文本文件")==0)
{ //如果还没有文件名则弹出保存文件的对话框
SFDialog.show();
tmpFileName=String.valueOf(SFDialog.getFile());
}
if(! tmpFileName.equals(Obj1))
{
/*这里需要添加的语句是将内容写入文件*/
HasSave=true;
FileName=tmpFileName;
setTitle(FileName);
return true; //保存成功返回true
}
else
return false; //保存不成功返回false
}
else
return true; //不用保存返回true
}
}