java swing 简易浏览器(其三)下载器,智能搜索栏与邮件发送

本文介绍了如何使用Java Swing构建简易浏览器的最后几个功能:集成下载器、实现智能搜索栏以及添加邮件发送功能。通过检测输入URL的格式,进行网页跳转或启动搜索引擎。同时,利用已有的下载器和邮件发送模块,完成图形界面操作。
摘要由CSDN通过智能技术生成

Java swing简易浏览器(其一)页面显示,超链接跳转与手动输入URL跳转

Java swing简易浏览器(其二)前进后退与收藏夹实现

java swing 简易浏览器(其三)下载器,智能搜索栏与邮件发送

前言

大作业继续。

之前的内容
Java swing简易浏览器(其一)页面显示,超链接跳转与手动输入URL跳转
Java swing简易浏览器(其二)前进后退与收藏夹实现

今天来实现最后几个功能。

实现思路

这里只介绍实现思路,代码的改动在【代码实现】部分

下载器

之前做了准备,我们使用之前写好的代码即可

Java swing 带界面和进度条的多线程下载器实现

我们在为JEditorPane组件绑定超链接事件的时候,跳转的时候判断一下地址是否合法

  • 如果符合规格,即以http包头的content type是否是text/html,是则跳转
  • 如果不符合,我们利用之前写好的下载器类,传入链接地址url并且打开下载器

智能搜索栏

我们知道,如果在浏览器的地址栏输入一些名词,而不是地址,浏览器会自动帮我们跳转到搜索页面。

了解这一点之后,我们在页面跳转之前,判断输入框的url是否符合规范,即以http打头,如果符合就跳转,否则修改链接,跳转到必应的搜索页面(百度的话,访问有bug)

关于必应搜索地址参数:

https://cn.bing.com/search?q=你要搜索的词汇

邮件发送

之前也造过类似的轮子
Java socket通过smtp协议 向邮箱服务器请求以实现发送邮件

我们在其基础上,加上图形界面即可。 图形界面的代码后面会放出。

代码实现

注意,以下代码的修改,都是基于上两次实验的代码来修改的,为了篇幅,我这里只放出修改的代码

完整代码在下面【完整代码】部分会贴出来

下载器

因为我们之前造过轮子了,所以使用以下语句就可以创建一个图形界面下载器。

MultiThreadDownloader dl = new MultiThreadDownloader(
							hyplink, 
							"E:/MyEclipse/WorkSpace/Hello/src/homework/", 
							"下载",
							3);
dl.download();

我们修改JEditorPane绑定超链接的事件的代码,修改为以下的代码:

// 添加超链接点击事件回调函数 并将JEditorPane的页面改为超链接的页面
jep.addHyperlinkListener(new HyperlinkListener() {
   
	public void hyperlinkUpdate(HyperlinkEvent event) {
   
		if(event.getEventType()==HyperlinkEvent.EventType.ACTIVATED) {
   
			// 获取超链接目的地址
			String hyplink = event.getURL().toString();
			try {
   
				// 判断content type 如果是text/html就访问 否则下载
				String ctype = new URL(hyplink).openConnection().getContentType().substring(0,  4);
				if(ctype.equals("text")) {
   
					newPage(hyplink);
				} else {
   
					MultiThreadDownloader dl = new MultiThreadDownloader(
							hyplink, 
							"E:/MyEclipse/WorkSpace/Hello/src/homework/", 
							"下载",
							3);
					dl.download();
				}
			} catch (Exception e) {
   
				e.printStackTrace();
				newPage(hyplink);
			} 
		}
	}
});

智能搜索栏

同样修改按下【点我访问网页】按钮的按下事件中执行的内容,我们判断输入是否是一个http链接,是则跳转,否则搜索

// 访问按钮 绑定访问按钮点击事件 从JTextField输入框获取URL并且访问
goBtn = new JButton("点我访问网页");
goBtn.addActionListener(new ActionListener() {
   
	public void actionPerformed(ActionEvent e) {
   
		// 获取输入的地址栏的地址
		String input = jtf.getText();
		if(input.equals(curPage)) {
   
			refreshPage();
		} else if(input.length()>4 && input.substring(0, 4).equals("http")){
   
			newPage(jtf.getText());
		} else {
   
			// 跳转到必应搜索
			newPage("https://cn.bing.com/search?q=" + jtf.getText());
		}
	}
});

邮件发送

我们实现一个类专门来发邮件,叫做EmailSender,其中send方法是之前造轮子的时候就写过了,故我们为其封装一个新方法sendInWindow(),即利用图形界面发送邮件。

在sendInWindow方法里面,会调用send方法来真正发送邮件。

void sendInWindow() {
   
	try {
   
		destInputText = new JLabel("目的邮箱地址");
		destInput = new JTextField("填写您的邮件目的地址");
		textInputText = new JLabel("内容");
		textInput = new JTextField("这是一封自动发送的邮件");
		sendBtn = new JButton("发送");
		sendBtn.addActionListener(new ActionListener() {
   
			public void actionPerformed(ActionEvent e) {
   
				try {
   
					send("smtp.qq.com", destInput.getText(), textInput.getText());
					sendBtn.setEnabled(false);
					sendBtn.setText("发送成功");
				} catch (Exception e1) {
   
					e1.printStackTrace();
					errcnt++;
					sendBtn.setText("发送失败 点我重新发送 "+String.valueOf(errcnt));
				}
			}
		});
		
		JFrame jf = new JFrame("邮件发送");
		
		jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		jf.setSize(768, 221);
		jf.setLayout(new GridLayout(5, 1));
		jf.add(destInputText);
		jf.add(destInput);
		jf.add(textInputText);
		jf.add(textInput);
		jf.add(sendBtn);
		jf.show();
		
	} catch(Exception e) {
   
		e.printStackTrace();
	}
}

在main函数中用两句话即可调用图形界面发送邮件

EmailSender sender = new EmailSender();
sender.sendInWindow();

如果要在浏览器处打开图形界面发送邮件,我们同样使用这两句就行。我们添加一个按钮来调出邮件窗口,并且绑定其按钮事件。

JButton emailBtn;	// 以成员变量

// ------- 其他代码 ------//

emailBtn = new JButton("邮件发送");
emailBtn.addActionListener(new ActionListener() {
   
	public void actionPerformed(ActionEvent e) {
   
		EmailSender sender = new EmailSender();
		sender.sendInWindow();
	}
});

完整代码

MyHtmlBrowser.java

/*
 * @Author : @李若龙 2018171028 @SZU @CSSE
 */
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
import java.util.regex.*;
import java.io.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.html.*;

public class MyHtmlBrowser {
   
	
	String curPage = "http://www.szulrl.cn/browserTest"; 
	JEditorPane jep;	// html显示组件
	JPanel menuBox;		// 上方菜单栏box 装有很多按钮和输入框
	JButton goBtn;		// 【点我访问】按钮
	JButton backBtn;	// 回退按钮
	JButton forwBtn;	// 前进按钮
	JButton refreshBtn;	// 刷新按钮
	JButton favoBtn;	// 收藏夹按钮 点击调出收藏夹
	JButton emailBtn;	// 发送邮件
	JTextField jtf;		// 输入框
	
	// 前进后退的栈 用双端队列实现
	Deque<String> backQueue = new LinkedList<String>();
	Deque<String> forwQueue = new LinkedList<String>();
	
	MyHtmlBrowser() {
   
		
	}
	
	MyHtmlBrowser(String cp) {
   
		curPage =
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值