Java 图形用户界面 高级组件综合例子
运行结果截图如下:
/** 作者:wwj 日期:2012/4/18 功能:利用图像用户界面高级组件实现简单记事本 说明: (1)创建一个名为“简单记事本”窗口,在窗口中添加一个带有滚动条的文本区。 (2)在窗口中添加一个具有以下菜单的菜单栏: 1.“文件”菜单,包含“打开”、“保存”、“退出”的菜单项,菜单间加分隔线, 添加事件处理方法,使菜单具有打开、保存文件及退出的功能。 2.“编辑”菜单,包含“复制”、“剪切”、“粘贴”的菜单项,添加事件处理方法, 使菜单具有“复制”、“剪切”、“粘贴”的功能。 3.“格式”菜单,包含“格式设置”的二级子菜单;而二级“格式设置”子菜单, 包含 “自动换行”、“取消自动换行”、“断行不断字”、“取消断行不断字”的菜单项,添加事件处理方法, 设置文本框自动换行和断行不断字的格式。 (提示:JTextArea类中,使用setLineWrap(true)方法设置自动换行,使用setWrapStyleword(true)方法设置断行不断字,参考书本例8.7) (3)在窗口中添加工具栏,包含“打开”、“保存”、“复制”、“剪切”、“粘贴”图片按钮的工具栏, 添加事件处理方法,单击相应的按钮能实现相应的功能。 (4)在窗口中添加弹出式菜单,包含“打开”、“保存”、“复制”、“剪切”、“粘贴”的菜单项, 直接添加分隔线,添并加事件处理方法,选择相应的菜单项能实现相应的功能。 **/ import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; public class Nodepad extends JFrame { private JTextArea editor; private Container c; private Font f=new Font("sanserif",Font.PLAIN,12); //菜单栏成员属性声明 private JMenuBar mb; //菜单棒 private JMenu fileMenu; //文件菜单 private JMenu editMenu; //编辑菜单 private JMenu formatMenu; //格式菜单 private JMenuItem fileMenuOpen,fileMenuSave,fileMenuExit; //文件菜单的菜单项 private JMenuItem editMenuCopy,editMenuCut,editMenuPaste; //编辑菜单的菜单项 private JMenu formatSet;//格式菜单第一级菜单 private JMenuItem lineWrap,cancleLineWrap,wrapStyleWord,cancleWrapStyleWord;//格式菜单的第二级菜单 //工具栏成员属性声明 private JToolBar toolBar; //工具棒 private JButton b1,b2,b3,b4,b5; //声明5个按钮,分别为:“打开”、“保存”、“复制”、“剪切”、“粘贴” //弹出式菜单属性声明 private JPopupMenu pm; private JMenuItem item1,item2,item3,item4,item5; public Nodepad() { super("简单记事本"); setSize(400,300); try{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e){ System.err.println("不能被设置外观的原因:"+e);} c=getContentPane(); //创建一个内容面板 editor = new JTextArea(); //创建一个文本区 c.add(new JScrollPane(editor)); //设置滚动条,并添加到内容面板 //菜单栏的实现 //文件菜单的实现 mb = new JMenuBar(); //创建菜单棒 fileMenu = new JMenu("文件(F)");//创建菜单 fileMenuOpen = new JMenuItem("打开(O)...Ctrl+O"); fileMenuSave = new JMenuItem("保存(S)...Ctrl+S"); fileMenuExit = new JMenuItem("退出"); JMHandler JM=new JMHandler(); //创建监听器 fileMenuOpen.addActionListener(JM); //注册监听器 fileMenuSave.addActionListener(JM); fileMenuExit.addActionListener(JM); fileMenu.add(fileMenuOpen); fileMenu.add(fileMenuSave); fileMenu.addSeparator(); //添加分隔线 fileMenu.add(fileMenuExit); fileMenu.setFont(f); //设置菜单中文体的字体 //编辑菜单的实现 editMenu = new JMenu("编辑(E)"); editMenuCopy = new JMenuItem("复制(C) Ctrl+C"); editMenuCut = new JMenuItem("剪切(T) Ctrl+X"); editMenuPaste = new JMenuItem("粘贴(P) Ctrl+v"); EMHandler EM=new EMHandler(); //创建监听器 editMenuCopy.addActionListener(EM);//注册监听器 editMenuCut.addActionListener(EM); editMenuPaste.addActionListener(EM); editMenu.add(editMenuCopy); editMenu.add(editMenuCut); editMenu.add(editMenuPaste); editMenu.setFont(f); //格式菜单的实现 formatMenu = new JMenu("格式(O)"); //创建菜单 formatSet = new JMenu("格式设置"); //二级菜单 lineWrap = new JMenuItem("自动换行"); //二级菜单项 cancleLineWrap = new JMenuItem("取消自动换行"); wrapStyleWord = new JMenuItem("断行不断字"); cancleWrapStyleWord = new JMenuItem("取消断行不断字"); FMHandler FM=new FMHandler(); //创建事件监听器 lineWrap.addActionListener(FM); //注册二级菜单项的监听器 cancleLineWrap.addActionListener(FM); wrapStyleWord.addActionListener(FM); cancleWrapStyleWord.addActionListener(FM); formatSet.add(lineWrap); formatSet.add(cancleLineWrap); formatSet.addSeparator(); //添加分隔线 formatSet.add(wrapStyleWord); formatSet.add(cancleWrapStyleWord); formatMenu.add(formatSet); formatMenu.setFont(f); //将菜单全部添加菜单棒里 mb.add(fileMenu); mb.add(editMenu); mb.add(formatMenu); //工具栏的实现 //按钮分别为:“打开”、“保存”、“复制”、“剪切”、“粘贴” toolBar =new JToolBar(); //创建工具棒 b1= new JButton(new ImageIcon("img/open.gif")); b2= new JButton(new ImageIcon("img/save.gif")); b3= new JButton(new ImageIcon("img/copy.gif")); b4= new JButton(new ImageIcon("img/cut.gif")); b5= new JButton(new ImageIcon("img/paste.gif")); TBHandler TB=new TBHandler(); //创建按钮监听器 b1.addActionListener(TB); b2.addActionListener(TB); b3.addActionListener(TB); b4.addActionListener(TB); b5.addActionListener(TB); //把按钮全部添加到工具棒中 toolBar.add(b1); toolBar.add(b2); toolBar.add(b3); toolBar.add(b4); toolBar.add(b5); //弹出菜单的实现 pm =new JPopupMenu(); //创建弹出菜单 item1 = new JMenuItem("打开"); item2 = new JMenuItem("保存"); item3 = new JMenuItem("复制"); item4 = new JMenuItem("剪切"); item5 = new JMenuItem("粘贴"); JPHandler JP=new JPHandler(); item1.addActionListener(JP); //注册菜单项的鼠标事件监听器 item2.addActionListener(JP); item3.addActionListener(JP); item4.addActionListener(JP); item5.addActionListener(JP); editor.addMouseListener(JP); //注册文本区的鼠标事件监听器 pm.add(item1); pm.add(item2); pm.add(item3); pm.add(item4); pm.add(item5); //把菜单栏、工具栏、弹出菜单添加到内容面板 setJMenuBar(mb); //显示菜单栏 c.add(toolBar,BorderLayout.NORTH); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //自定义类实现文件菜单项的事件处理 private class JMHandler implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource()==fileMenuOpen){ loadFile(); } else if(e.getSource()==fileMenuSave){ 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.showSaveDialog(this); if(r==JFileChooser.APPROVE_OPTION) { File file=fc.getSelectedFile(); try{ editor.write(new FileWriter(file));} catch(IOException e){} } } //编辑菜单菜单项的事件处理 private class EMHandler implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource()==editMenuCopy) //实现复制功能 { editor.copy(); editor.requestFocus(); } else if(e.getSource()==editMenuCut)//实现剪切功能 { editor.cut(); editor.requestFocus(); } else //实现粘贴功能 { editor.paste(); editor.requestFocus(); } } } //格式菜单二级菜单的菜单项的事件处理 private class FMHandler implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource()==lineWrap){ editor.setLineWrap(true); } else if(e.getSource()==cancleLineWrap) { editor.setLineWrap(false);} else if(e.getSource()==wrapStyleWord) { editor.setWrapStyleWord(true);} else{ editor.setWrapStyleWord(false); } } } //自定义类实现工具栏的按钮事件处理 private class TBHandler implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource()==b1){ loadFile(); } //实现打开文件功能 else if(e.getSource()==b2) {saveFile();} //实现保存文件功能 else if(e.getSource()==b3) //文件复制 { editor.copy(); editor.requestFocus(); } else if(e.getSource()==b4) //文件剪切 { editor.cut(); editor.requestFocus(); } else //文件粘贴 { editor.paste(); editor.requestFocus(); } } } //自定义类实现弹出式菜单的事件处理 private class JPHandler implements ActionListener,MouseListener { public void actionPerformed(ActionEvent e) { if(e.getSource()==item1){ loadFile(); } //实现打开文件功能 else if(e.getSource()==item2) {saveFile();} //实现保存文件功能 else if(e.getSource()==item3) //文件复制 { editor.copy(); editor.requestFocus(); } else if(e.getSource()==item4) //文件剪切 { editor.cut(); editor.requestFocus(); } else //文件粘贴 { editor.paste(); editor.requestFocus(); } } public void mouseReleased(MouseEvent e) { if(e.isPopupTrigger()) //判断是否按下鼠标右键 pm.show(editor,e.getX(),e.getY()); //显示弹出式菜单 } public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} } public static void main(String []args) { Nodepad N=new Nodepad(); } }