实例介绍
【实例简介】使用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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论