【Java swing简易浏览器(其一)页面显示,超链接跳转与手动输入URL跳转】
【Java swing简易浏览器(其二)前进后退与收藏夹实现】
【java swing 简易浏览器(其三)下载器,智能搜索栏与邮件发送】
目录
前言
这学期互联网java课程的大作业下来了。。
挺难的但是害得做啊,要恰饭的嘛 我就是懒狗
老师说都是把学过的内容缝合一下,迫真作业拧螺丝期末造火箭Orz
关于服务器,之前已经实现过了:【Java用socket基于http协议搭建一个简易的http服务器】
难点就是这个浏览器了。。。不过好在java有提供相关的辅助包,swing,那么今天先来实现一个简单的浏览器的基本功能
- 显示html页面
- 超链接跳转
- 输入URL并且跳转到目标页面
Swing及其组件介绍
什么是swing
Swing是一个java的GUI工具包,这意味着它是java基础类的一部分(强大的java救我狗命Orz),除此之外,Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。
JFrame
JFrame – java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。----菜鸟教程
JFrame是swing的基础,也就是一个windows的窗口,可以缩放,关闭等功能。
使用以下几行代码可以快速创建一个空的JFrame窗口
import javax.swing.*;
JFrame jf = new JFrame("这是JFrame窗口");
jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jf.setSize(1200, 700);
jf.show();
使用add方法可以向JFrame窗口添加一些组件。这也是我们搭建简易浏览器的基础。
JPanel
JPanel – Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing包中,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合,是一种轻量级容器,可以加入到JFrame窗体中。----菜鸟教程
简单的来说,JPanel就像一种【盒子】,供我们添加元组件
你可能会问为啥不直接向JFrame对象添加组件?
比如我希望JFrame中的组件纵向排列,而有一行组件需要横向排列的时候,直接向JFrame添加就不能实现。
而我们实现一个横向排列的JPanel,将所有横向排列的组件装起来,然后再在JFrame中纵向排列就可以实现。这只是其中的一个问题,而已,JPanel还有其他的用途,之后再谈。
JTextField
JTextField –一个轻量级组件,它允许编辑单行文本。----菜鸟教程
就是一个输入框,这个我们浏览器输入URL会用到。
以下代码可以简单的生成一个输入框。
import javax.swing.*;
JTextField jtf = new JTextField("这是输入框");
JFrame jf = new JFrame("这是JFrame窗口");
jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jf.setSize(1200, 700);
jf.add(jtf);
jf.show();
JButton
JButton – JButton 类的实例。用于创建按钮类似实例中的 “Login”。----菜鸟教程
一个按钮组件,我们简易浏览器也会用到。
JEditorPane
最最最重要的核心组件,JEditorPane类实现了对html的解析,并且以图形化的形式渲染到窗口上。它可以直接处理html文档,通过传入一个简单的URL字符串就可以自动打开网页,相当方便了。
使用以下代码来快速生成一个显示页面的demo,目标页面是在我的个人服务器上部署的一个html测试页面:http://www.szulrl.cn/browserTest
import javax.swing.*;
JEditorPane jep = new JEditorPane();
jep.setEditable(false); // 如果不设置则无法和超链接交互
jep.setContentType("text/html;charset=utf-8"); // 设置编码类型
jep.setPage("http://www.szulrl.cn/browserTest"); // 设置URL
JFrame jf = new JFrame("这是JFrame窗口");
jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jf.setSize(1200, 700);
jf