实例介绍
【实例简介】使用Java完成的简单邮箱系统,界面由Java Swing实现,具有以下功能: 1、邮件收发等邮箱基本功能 2、可设置黑名单、白名单,并过滤邮件 3、使用朴素贝叶斯算法检测评估邮件是否为垃圾邮件
【实例截图】
【核心代码】
package frame; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.beans.PropertyVetoException; import javax.swing.JButton; import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import utils.ClassNameTreeCellRenderer; import utils.EditorUtils; import utils.FrameFactory; import utils.ReadLinkmanXMl; import utils.ReceiveMailTable; public class MainFrame extends JFrame implements ActionListener, MouseListener { private static final long serialVersionUID = 1L; private static JDesktopPane desktopPane = null;// 用于创建多文档界面或虚拟桌面的容器 public static MainFrame MAINFRAME; private JTree tree;// 树形图 private JList jl;// 联系人列表 private JPanel panel, panelframe;// panelframe左半部界面 private JLabel labelbackground; private JScrollPane scrollPane; private JMenuItem exitMI = null, newMailMI = null, sendedMI = null, receiveMI = null, recycleMI = null, refreshMI = null, antiSpamMI = null, blacklistMI = null, whitelistMI = null; private JButton addLinkmanButton = null;// 添加联系人按钮 private JMenu mailMenu = null; private JMenu antiSpamMenu = null; private ReadLinkmanXMl readLinkman = null; // 初始化界面配置 public void jFrameValidate() { Toolkit tk = getToolkit();// 获得屏幕的宽和高 Dimension dim = tk.getScreenSize(); this.setBounds(dim.width / 2 - 420, dim.height / 2 - 350, 850, 678); validate(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public MainFrame() { super("电子邮件"); MAINFRAME = this; this.setIconImage(EditorUtils.createIcon("email.png").getImage()); desktopPane = new JDesktopPane(); jFrameValidate();// 初始化界面 JMenuBar menuBar = new JMenuBar(); this.setJMenuBar(menuBar); final JMenu fileMenu = new JMenu("文件(F)"); mailMenu = new JMenu("邮件(M)"); antiSpamMenu = new JMenu("反垃圾邮件"); menuBar.add(fileMenu); menuBar.add(mailMenu); menuBar.add(antiSpamMenu); exitMI = addMenuItem(fileMenu, "退出", "exit.gif");// 退出菜单项的初始化 newMailMI = addMenuItem(mailMenu, "新建邮件", "newMail.gif");// 新建邮件菜单项的初始化 sendedMI = addMenuItem(mailMenu, "已发送", "sended.png");// 已发送邮件菜单项的初始化 receiveMI = addMenuItem(mailMenu, "收件箱", "receive.png");// 收件箱邮件菜单项的初始化 recycleMI = addMenuItem(mailMenu, "已删除", "deleted.png");// 已删除邮件菜单项的初始化 refreshMI = addMenuItem(mailMenu, "刷新收件箱", "refresh.jpg");// 已删除邮件菜单项的初始化 antiSpamMI = addMenuItem(antiSpamMenu, "反垃圾邮件设置", "refresh.jpg"); blacklistMI = addMenuItem(antiSpamMenu, "黑名单设置","refresh.jpg"); whitelistMI = addMenuItem(antiSpamMenu, "白名单设置","refresh.jpg"); // 构建树形节点 DefaultMutableTreeNode root = new DefaultMutableTreeNode("电子邮件系统"); DefaultMutableTreeNode addressee = new DefaultMutableTreeNode("收件夹"); DefaultMutableTreeNode send = new DefaultMutableTreeNode("发件夹"); DefaultMutableTreeNode spam = new DefaultMutableTreeNode("垃圾邮件"); DefaultMutableTreeNode AlreadySend = new DefaultMutableTreeNode("已发送邮件"); DefaultMutableTreeNode delete = new DefaultMutableTreeNode("已删除邮件"); root.add(send); root.add(addressee); root.add(spam); root.add(AlreadySend); root.add(delete); tree = new JTree(root); tree.addMouseListener(this);// 为树形节点注册鼠标事件 tree.setPreferredSize(new Dimension(160, 150)); // 重新渲染树形节点 ClassNameTreeCellRenderer render = new ClassNameTreeCellRenderer(); tree.setCellRenderer(render); // 联系人面板 panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.setPreferredSize(new Dimension(160, 300)); // 界面左半部面板 panelframe = new JPanel(); panelframe.setLayout(new BorderLayout()); panelframe.add(panel, BorderLayout.CENTER); panelframe.add(tree, BorderLayout.NORTH); addLinkmanButton = new JButton(); addLinkmanButton.setText("联系人(C)"); addLinkmanButton.setIcon(EditorUtils.createIcon("linkman.gif")); panel.add(addLinkmanButton, BorderLayout.NORTH); addLinkmanButton.addActionListener(this);// 注册添加联系人事件 readLinkman = new ReadLinkmanXMl(); jl = readLinkman.makeList();// 返回联系人列表 jl.addMouseListener(this);// 添加联系人列表双击事件 scrollPane = new JScrollPane(); panel.add(scrollPane, BorderLayout.CENTER); scrollPane.setViewportView(jl);// 在滚动面板中添加联系人 validate(); labelbackground = new JLabel(); labelbackground.setIcon(null); // 窗体背景 desktopPane.addComponentListener(new ComponentAdapter() { public void componentResized(final ComponentEvent e) { Dimension size = e.getComponent().getSize(); labelbackground.setSize(e.getComponent().getSize()); labelbackground.setText("<html><img width=" size.width " height=" size.height " src='" this.getClass().getResource("/main.png") "'></html>"); } }); desktopPane.add(labelbackground, new Integer(Integer.MIN_VALUE)); // 添加一个分割窗口 JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panelframe, desktopPane); splitPane.setOneTouchExpandable(true);// 在分隔条上提供一个 UI 小部件来快速展开/折叠分隔条 splitPane.setDividerSize(10);// 设置分隔条的大小 getContentPane().add(splitPane, BorderLayout.CENTER); } // 返回新建菜单项 private JMenuItem addMenuItem(JMenu menu, String name, String icon) { // 新建邮件菜单项的初始化 JMenuItem menuItem = new JMenuItem(name, EditorUtils.createIcon(icon)); menuItem.addActionListener(this);// 监听退出菜单项事件 menu.add(menuItem); return menuItem; } // 添加子窗体的方法 public static void addIFame(JInternalFrame iframe) { JInternalFrame[] frames = desktopPane.getAllFrames(); try { for (JInternalFrame ifm : frames) { if (ifm.getTitle().equals(iframe.getTitle())) { desktopPane.selectFrame(true); ifm.toFront(); ifm.setSelected(true); return; } } desktopPane.add(iframe); iframe.setSelected(true); iframe.toFront(); } catch (PropertyVetoException e) { e.printStackTrace(); } } // action事件的处理 @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == exitMI) { System.exit(0);// 退出系统 } else if (e.getSource() == addLinkmanButton) { addIFame(FrameFactory.getFrameFactory().getAddLinkManFrame());// 联系人列表 } else if (e.getSource() == newMailMI) {// 新建邮件 addIFame(FrameFactory.getFrameFactory().getSendFrame());// 发件夹 } else if (e.getSource() == itemPopupOne || e.getSource() == refreshMI) {// 右键刷新收件列表 ReceiveMailTable.getMail2Table().startReceiveMail();// 右键刷新收件列表 } else if (e.getSource() == sendedMI) {// 已发送 addIFame(FrameFactory.getFrameFactory().getSendedFrame());// 已发送 } else if (e.getSource() == receiveMI) {// 收邮件 addIFame(FrameFactory.getFrameFactory().getReceiveFrame());// 收邮件 } else if (e.getSource() == recycleMI) {// 已删除 addIFame(FrameFactory.getFrameFactory().getRecycleFrame());// 收邮件 } else if (e.getSource() == antiSpamMI) { addIFame(FrameFactory.getFrameFactory().getAntiSpamSettingFrame()); } else if (e.getSource() == blacklistMI) { addIFame(FrameFactory.getFrameFactory().getBlacklistFrame()); } else if (e.getSource() == whitelistMI) { addIFame(FrameFactory.getFrameFactory().getWhitelistFrame()); } } private SendFrame sendFrame = null;// 发送邮件对象 public JMenuItem itemPopupOne = null;// 鼠标右键第一个选项 @Override public void mouseClicked(MouseEvent e) { // 树形节点中的单击事件 DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree .getLastSelectedPathComponent(); if (e.getSource() == tree && e.getButton() != 3 && e.getButton() != 2) { if (selectedNode == null) return; else if (selectedNode.toString().equals("发件夹")) { sendFrame = FrameFactory.getFrameFactory().getSendFrame(); addIFame(sendFrame);// 发件夹 } else if (selectedNode.toString().equals("收件夹")) { addIFame(FrameFactory.getFrameFactory().getReceiveFrame());// 收件夹 } else if(selectedNode.toString().equals("垃圾邮件")){ addIFame(FrameFactory.getFrameFactory().getSpamFrame()); }else if (selectedNode.toString().equals("已发送邮件")) { addIFame(FrameFactory.getFrameFactory().getSendedFrame());// 已发送邮件 } else if (selectedNode.toString().equals("已删除邮件")) { addIFame(FrameFactory.getFrameFactory().getRecycleFrame());// 已删除邮件 } } else if (e.getSource() == jl && e.getClickCount() == 2) {// 双击联系人事件 int index = jl.getSelectedIndex(); if (sendFrame != null && sendFrame.isSelected()) {// 如果发送邮件界面被初始化并且被激活 sendFrame.addLinkman(readLinkman.findLinkman(index)); } } else if (e.getButton() == MouseEvent.BUTTON3 && e.getSource() == tree) {// 收件箱右键刷新 if (selectedNode == null) return; else if ("收件夹".equals(selectedNode.toString())) { JPopupMenu popup = new JPopupMenu(); itemPopupOne = new JMenuItem("刷新收件箱", EditorUtils.createIcon("refresh.jpg")); itemPopupOne.addActionListener(this); popup.add(itemPopupOne); popup.show(e.getComponent(), e.getX(), e.getY()); } } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论