/**
作者:wwj
日期:2012/4/14
功能:创建一个由菜单栏、工具栏组成的窗口
说明:菜单栏的创建包括菜单棒、多级菜单、弹出式菜单、文件选择器的创建
工具栏包括:标签、按钮的创建
**/
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class JM extends JFrame
{
//创建菜单棒
JMenuBar mb=new JMenuBar();
//创建弹出菜单
JPopupMenu pm=new JPopupMenu();
JMenuItem item1=new JMenuItem("复制");
JMenuItem item2=new JMenuItem("剪切");
JMenuItem item3=new JMenuItem("粘贴");
//创建菜单
JMenu m1=new JMenu("文件(F)");
JMenu creat_New=new JMenu("新建");
//创建菜单项
JMenuItem open=new JMenuItem("打开(O)...Ctrl+O");
JMenuItem close=new JMenuItem("保存(S)...Ctrl+s");
JMenuItem exit=new JMenuItem("退出");
JMenu m2=new JMenu("编辑(E)");
JMenuItem copy=new JMenuItem("复制(C)...Ctrl+c");
JMenuItem cut=new JMenuItem("剪切(T)...Ctrl+X");
JMenuItem paste=new JMenuItem("粘贴(p)...Ctrl+v");
JMenu m3=new JMenu("帮助(H)");
JMenuItem content=new JMenuItem("目录");
JMenuItem index=new JMenuItem("索引");
JMenuItem about=new JMenuItem("关于");
//工具栏
JToolBar toolBar=new JToolBar(); //创建工具栏对象
JButton b1=new JButton(new ImageIcon("image/cut_16x16.gif"));
JButton b2=new JButton(new ImageIcon("image/copy_16x16.gif"));
JButton b3=new JButton(new ImageIcon("image/file_16x16.gif"));
JLabel l=new JLabel("");
//文本区
JTextArea editor=new JTextArea();
Font t=new Font("sanserif",Font.PLAIN,12);//设置字体
JM()
{
super("使用菜单栏的窗口");
setSize(400,300);
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
System.err.println("不能设置外观的原因:"+e);
}
//创建内容面板
Container c;
c=getContentPane();
c.add(new JScrollPane(editor));
//多级菜单
JMenuItem i21=new JMenuItem("普通文本文件");
JMenuItem i22=new JMenuItem("HTML页面文件");
//将二级菜单项直接添加到菜单creat_New
creat_New.add(i21); creat_New.add(i22);
//弹出式菜单
//将弹出式菜单加入到文本区中
pm.add(item1);
pm.add(item2);
pm.add(item3);
IHandler it=new IHandler(); //创建监听器
item1.addActionListener(it);//注册菜单项的鼠标事件监听器
item2.addActionListener(it);
item3.addActionListener(it);
editor.addMouseListener(it); //注册文本区的鼠标事件监听器
editor.add(pm);
//文本选择器
FHandler fh=new FHandler(); //创建监听器
open.addActionListener(fh);
close.addActionListener(fh);
exit.addActionListener(fh);
//工具栏
JTHandler JT=new JTHandler(); //创建监听器
b1.addActionListener(JT);
b2.addActionListener(JT);
b3.addActionListener(JT);
toolBar.add(b1);
toolBar.add(b2);
toolBar.add(b3);
c.add(toolBar,BorderLayout.NORTH);
c.add(l,BorderLayout.SOUTH);
addFileMenu();
addEditMenu();
addHelpMenu();
addJMenuBar();
setJMenuBar(mb);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void addFileMenu() //创建“文件”的方法
{
m1.add(creat_New,0);
m1.add(open); //将菜单项加入到菜单
m1.add(close);
m1.addSeparator(); //将分隔条加入到菜单中
m1.add(exit);
m1.setFont(t); //设置菜单字体
}
//将菜单项添加到编辑菜单
private void addEditMenu()
{
m2.add(copy); m2.add(cut);
m2.addSeparator(); m2.add(paste);
m2.setFont(t);
}
//将菜单项添加到帮助菜单
private void addHelpMenu()
{
m3.add(content); m3.add(index);
m3.addSeparator(); m3.add(about);
m3.setFont(t);
}
//将菜单添加到菜单棒
private void addJMenuBar()
{
mb.add(m1); mb.add(m2);
mb.add(m3); mb.setBackground(Color.cyan);
}
//弹出菜单的事件处理
private class IHandler implements ActionListener,MouseListener
{
public void actionPerformed(ActionEvent e)
{
editor.append("你选择了"+e.getActionCommand()+"\n");
}
public void mouseReleased(MouseEvent e1)
{
if(e1.isPopupTrigger())
pm.show(editor,e1.getX(),e1.getY()); //显示弹出试菜单
}
public void mouseClicked(MouseEvent e1){}
public void mouseEntered(MouseEvent e1){}
public void mouseExited(MouseEvent e1){}
public void mousePressed(MouseEvent e1){}
}
//定义一个内部类实现文件选择处理事件
private class FHandler implements ActionListener
{
public void actionPerformed(ActionEvent e2)
{
if(e2.getSource()==open){ loadFile();}
else if(e2.getSource()==close){ saveFile(); }
else { System.exit(0); }
}
}
public void loadFile() //读取文件的方法
{
JFileChooser fc=new JFileChooser();
int r=fc.showOpenDialog(this);
if(r==JFileChooser.APPROVE_OPTION)
{
File file=fc.getSelectedFile();
try{ editor.read(new FileReader(file),null); }
catch(IOException e){}
}
}
public void saveFile() //保存文件的方法
{
JFileChooser fc=new JFileChooser();
int r=fc.showOpenDialog(this);
if(r==JFileChooser.APPROVE_OPTION)
{
File file=fc.getSelectedFile();
try{ editor.write(new FileWriter(file));}
catch(IOException e){}
}
}
//工具栏按钮的事件处理
private class JTHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String s="";
if(e.getSource()==b1) s="单击了剪切按钮\n";
else if(e.getSource()==b2) s="单击了复制按钮\n";
else if(e.getSource()==b3) s="单击了粘贴按钮\n";
l.setText(s);
}
}
//主方法
public static void main(String[] args)
{
new JM();
}
}