1.JEditorPane
可以直接把网页文件放上去简单
2.调用浏览器代开并非真正的java浏览器
这个地址:http://blog.csdn.net/lxf9601/article/details/6967167
http://download.csdn.net/download/ajaxhu/6394751
可以直接把网页文件放上去简单
package com.list; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.KeyStroke; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.filechooser.FileFilter; public class WebBrowser extends JFrame implements HyperlinkListener, PropertyChangeListener { public static void main(String[] args) throws IOException { // 设置浏览器,当所有浏览器窗口都被关闭时,退出应用程序 WebBrowser.setExitWhenLastWindowClosed(true); // 创建一个浏览器窗口 WebBrowser browser = new WebBrowser(); // 设置浏览器窗口的默认大小 browser.setSize(800, 600); // 显示窗口 browser.setVisible(true); // 打开主页 browser.displayPage(browser.getHome()); } // 显示HTML的面板 JEditorPane textPane; // 最底下的状态栏 JLabel messageLine; // 网址URL输入栏 JTextField urlField; // 文件选择器,打开本地文件时用 JFileChooser fileChooser; // 后退和前进 按钮 JButton backButton; JButton forwardButton; JButton button; // 保存历史记录的列表 java.util.List history = new ArrayList(); // 当前页面的在历史记录列表中位置 int currentHistoryPage = -1; // 当历史记录超过MAX_HISTORY时,清除旧的历史 public static final int MAX_HISTORY = 50; // 当前已经打开的浏览器窗口数 static int numBrowserWindows = 0; // 标识当所有浏览器窗口都被关闭时,是否退出应用程序 static boolean exitWhenLastWindowClosed = false; // 默认的主页 String home = "http://www.szu.edu.cn/szu.asp"; public WebBrowser() { super("WebBrowser"); // 新建显示HTML的面板,并设置它不可编辑 textPane = new JEditorPane(); textPane.setEditable(false); button = new JButton("Go!"); // 注册事件处理器,用于超连接事件。 textPane.addHyperlinkListener(this); // 注册事件处理器,用于处理属性改变事件。当页面加载结束时,触发该事件 textPane.addPropertyChangeListener(this); // 将HTML显示面板放入主窗口,居中显示 this.getContentPane().add(new JScrollPane(textPane), BorderLayout.CENTER); // 创建状态栏标签,并放在主窗口底部 messageLine = new JLabel(" "); this.getContentPane().add(messageLine, BorderLayout.SOUTH); // 初始化菜单和工具栏 this.initMenu(); this.initToolbar(); // 将当前打开窗口数增加1 WebBrowser.numBrowserWindows++; // 当关闭窗口时,调用close方法处理 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { close(); } }); } private void initMenu() { // 文件菜单,下面有四个菜单项:新建、打开、保存、关闭窗口、退出 JMenu fileMenu = new JMenu("文件"); fileMenu.setMnemonic('F'); JMenuItem newMenuItem = new JMenuItem("新建"); newMenuItem.setMnemonic('N'); // 当“新建”时打开一个浏览器窗口 newMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { newBrowser(); } }); JMenuItem openMenuItem = new JMenuItem("打开"); openMenuItem.setMnemonic('O'); // 当“打开”是打开文件选择器,选择待打开的文件 openMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openLocalPage(); } }); // 保存 JMenuItem saveMenuItem = new JMenuItem("保存"); saveMenuItem.setMnemonic('S'); saveMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveLocalPage(); } }); JMenuItem closeMenuItem = new JMenuItem("关闭窗口"); closeMenuItem.setMnemonic('C'); // 当“关闭窗口”时关闭当前窗口 closeMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { close(); } }); JMenuItem exitMenuItem = new JMenuItem("退出"); exitMenuItem.setMnemonic('E'); // 当“退出”时退出应用程序 exitMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { exit(); } }); fileMenu.add(newMenuItem); fileMenu.add(openMenuItem); fileMenu.add(saveMenuItem); fileMenu.add(closeMenuItem); fileMenu.add(exitMenuItem); // 设置快捷键 newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK)); openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); closeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); // 帮助菜单,就一个菜单项:关于 JMenu helpMenu = new JMenu("帮助"); fileMenu.setMnemonic('H'); JMenuItem aboutMenuItem = new JMenuItem("关于"); aboutMenuItem.setMnemonic('A'); helpMenu.add(aboutMenuItem); aboutMenuItem.setAccelerator(KeyStroke.getKeyStroke('A')); JMenuBar menuBar = new JMenuBar(); menuBar.add(fileMenu); menuBar.add(helpMenu); // 设置菜单栏到主窗口 this.setJMenuBar(menuBar); } // 初始化工具栏 private void initToolbar() { // 后退按钮,退到前一页面。初始情况下该按钮不可用 backButton = new JButton("后退"); backButton.setEnabled(false); backButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { back(); } }); // 前进按钮,进到前一页面。初始情况下该按钮不可用 forwardButton = new JButton("前进"); forwardButton.setEnabled(false); forwardButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { forward(); } }); // 前进按钮,进到前一页面。初始情况下该按钮不可用 JButton refreshButton = new JButton("刷新"); refreshButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { reload(); } }); // 主页按钮,打开主页 JButton homeButton = new JButton("主页"); homeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { home(); } }); JToolBar toolbar = new JToolBar(); toolbar.add(backButton); toolbar.add(forwardButton); toolbar.add(refreshButton); toolbar.add(homeButton); // 输入网址的文本框 urlField = new JTextField(); // 当用户输入网址、按下回车键时,触发该事件 urlField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { displayPage(urlField.getText()); } }); // 当"Go!"按钮按下时 urlField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { displayPage(urlField.getText()); } }); // 地址标签 toolbar.add(new JLabel(" 地址栏")); toolbar.add(urlField); toolbar.add(button); // 将工具栏放在主窗口的北部 this.getContentPane().add(toolbar, BorderLayout.NORTH); } // 设置浏览器是否在所有窗口都关闭时退出 public static void setExitWhenLastWindowClosed(boolean b) { exitWhenLastWindowClosed = b; } // 设置主页 public void setHome(String home) { this.home = home; } // 获取主页 public String getHome() { return home; } // 访问网址URL private boolean visit(URL url) { try { String href = url.toString(); // 启动动画,当网页被加载完成时,触发propertyChanged事件,动画停止。 startAnimation("加载 " + href + "..."); // 设置显示HTML面板的page属性为待访问的URL, // 在这个方法里,将打开URL,将URL的流显示在textPane中。 // 当完全打开后,该方法才结束。 textPane.setPage(url); // 页面打开后,将浏览器窗口的标题设为URL this.setTitle(href); // 网址输入框的内容也设置为URL urlField.setText(href); return true; } catch (IOException ex) { // 停止动画 stopAnimation(); // 状态栏中显示错误信息 messageLine.setText("不能打开页面:" + ex.getMessage()); return false; } } // 浏览器打开URL指定的页面,如果成功,将URL放入历史列表中 public void displayPage(URL url) { // 尝试访问页面 if (visit(url)) { // 如果成功,则将URL放入历史列表中。 history.add(url); int numentries = history.size(); if (numentries > MAX_HISTORY + 10) { history = history.subList(numentries - MAX_HISTORY, numentries); numentries = MAX_HISTORY; } // 将当前页面下标置为numentries-1 currentHistoryPage = numentries - 1; // 如果当前页面不是第一个页面,则可以后退,允许点击后退按钮。 if (currentHistoryPage > 0) { backButton.setEnabled(true); } } } // 浏览器打开字符串指定的页面 public void displayPage(String href) { try { // 默认为HTTP协议 if (!href.startsWith("http://")) { href = "http://" + href; } displayPage(new URL(href)); } catch (MalformedURLException ex) { messageLine.setText("错误的网址: " + href); } } // 打开本地文件 public void openLocalPage() { // 使用“创建”模式,当需要时,才创建文件选择器。 if (fileChooser == null) { fileChooser = new JFileChooser(); // 使用文件过滤器限制只能够HTML和HTM文件 FileFilter filter = new FileFilter() { public boolean accept(File f) { String fn = f.getName(); if (fn.endsWith(".html") || fn.endsWith(".htm")) { return true; } else { return false; } } public String getDescription() { return "HTML Files"; } }; fileChooser.setFileFilter(filter); // 只允许选择HTML和HTM文件 fileChooser.addChoosableFileFilter(filter); } // 打开文件选择器 int result = fileChooser.showOpenDialog(this); // 如果确定打开文件,则在当前窗口中打开选择的文件 if (result == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); try { displayPage(selectedFile.toURL()); } catch (MalformedURLException e) { e.printStackTrace(); } } } // 打开保存文件夹 public void saveLocalPage() { if (fileChooser == null) { fileChooser = new JFileChooser(); // 打开文件选择器 int result = fileChooser.showSaveDialog(this); // 如果确定打开文件,则在当前窗口中打开选择的文件 if (result == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); try { displayPage(selectedFile.toURL()); } catch (MalformedURLException e) { e.printStackTrace(); } } } } // 后退,回到前一页 public void back() { if (currentHistoryPage > 0) { // 访问前一页 visit((URL) history.get(--currentHistoryPage)); } // 如果当前页面下标大于0,允许后退 backButton.setEnabled((currentHistoryPage > 0)); // 如果当前页面下标不是最后,允许前进 forwardButton.setEnabled((currentHistoryPage < history.size() - 1)); } // 前进,回到后一页 public void forward() { if (currentHistoryPage < history.size() - 1) { visit((URL) history.get(++currentHistoryPage)); } // 如果当前页面下标大于0,允许后退 backButton.setEnabled((currentHistoryPage > 0)); // 如果当前页面下标不是最后,允许前进 forwardButton.setEnabled((currentHistoryPage < history.size() - 1)); } // 重新加载当前页面 public void reload() { if (currentHistoryPage != -1) { // 先显示为空白页 textPane.setDocument(new javax.swing.text.html.HTMLDocument()); // 再访问当前页 visit((URL) history.get(currentHistoryPage)); } } // 显示主页 public void home() { displayPage(getHome()); } // 打开新的浏览器窗口 public void newBrowser() { WebBrowser b = new WebBrowser(); // 新窗口大小和当前窗口一样大 b.setSize(this.getWidth(), this.getHeight()); b.setVisible(true); } // 关闭当前窗口,如果所有窗口都关闭,则根据exitWhenLastWindowClosed属性,判断是否退出应用程序 public void close() { // 先隐藏当前窗口,销毁窗口中的组件。 this.setVisible(false); this.dispose(); // 将当前打开窗口数减1。 // 如果所有窗口都已关闭,而且exitWhenLastWindowClosed为真,则退出 // 这里采用了synchronized关键字,保证线程安全 synchronized (WebBrowser.class) { WebBrowser.numBrowserWindows--; if ((numBrowserWindows == 0) && exitWhenLastWindowClosed) { System.exit(0); } } } // 退出应用程序 public void exit() { // 弹出对话框,请求确认,如果确认退出,则退出应用程序 if ((JOptionPane.showConfirmDialog(this, "你是否确定退出Web浏览器?", "退出", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)) { System.exit(0); } } // 实现HyperlinkListener接口。处理超连接事件 public void hyperlinkUpdate(HyperlinkEvent e) { // 获取事件类型 HyperlinkEvent.EventType type = e.getEventType(); // 如果是点击了一个超连接,则显示被点击的连接 if (type == HyperlinkEvent.EventType.ACTIVATED) { displayPage(e.getURL()); } // 如果是鼠标移动到超连接上,则在状态栏中显示超连接的网址 else if (type == HyperlinkEvent.EventType.ENTERED) { messageLine.setText(e.getURL().toString()); } // 如果是鼠标离开了超连接,则状态栏显示为空 else if (type == HyperlinkEvent.EventType.EXITED) { messageLine.setText(" "); } } public void propertyChange(PropertyChangeEvent e) { if (e.getPropertyName().equals("page")) { // 页面加载完毕时,textPane的page属性发生改变,此时停止动画。 stopAnimation(); } } // 动画消息,显示在最底下状态栏标签上,用于反馈浏览器的状态 String animationMessage; // 动画当前的帧的索引 int animationFrame = 0; // 动画所用到的帧,是一些字符。 String[] animationFrames = new String[] { "-", "\\", "|", "/", "-", "\\", "|", "/", ",", ".", "o", "0", "O", "#", "*", "+" }; // 新建一个Swing的定时器,每个125毫秒更新一次状态栏标签的文本 javax.swing.Timer animator = new javax.swing.Timer(125, new ActionListener() { public void actionPerformed(ActionEvent e) { animate(); } }); // 显示动画的当前帧到状态栏标签上,并将帧索引后移 private void animate() { String frame = animationFrames[animationFrame++]; messageLine.setText(animationMessage + " " + frame); animationFrame = animationFrame % animationFrames.length; } // 启动动画 private void startAnimation(String msg) { animationMessage = msg; animationFrame = 0; // 启动定时器 animator.start(); } // 停止动画 private void stopAnimation() { // 停止定时器 animator.stop(); messageLine.setText(" "); } }
2.调用浏览器代开并非真正的java浏览器
package com.list; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class Browser { public static void main(String[] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel(); final JTextField url = new JTextField(20); JButton button = new JButton("Open Browser"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { OpenBrowser.openURL(url.getText().trim()); } }); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel.add(new JLabel("URL:")); panel.add(url); panel.add(button); frame.getContentPane().add(panel); frame.pack(); frame.setVisible(true); } }
package com.list; import javax.swing.JOptionPane; public class OpenBrowser { public static void openURL(String url) { String osName = System.getProperty("os.name"); try { if (osName.startsWith("Windows")) Runtime.getRuntime().exec( "rundll32 url.dll,FileProtocolHandler " + url); else { String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" }; String browser = null; for (int count = 0; count < browsers.length && browser == null; count++) if (Runtime.getRuntime() .exec(new String[] { "which", browsers[count] }) .waitFor() == 0) browser = browsers[count]; Runtime.getRuntime().exec(new String[] { browser, url }); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "Error in opening browser" + ":\n" + e.getLocalizedMessage()); } } }
这个地址:http://blog.csdn.net/lxf9601/article/details/6967167
http://download.csdn.net/download/ajaxhu/6394751
相关推荐
java开发可安装程序exe的swing嵌套浏览器汇总整理。。
Java英文单词汇总 Java 英文单词汇总是 Java 语言中广泛使用的一些英文单词的总结,这些单词涵盖了 Java 中的大部分方法的名字。了解这些单词的含义可以帮助开发者更好地理解 Java 语言,并提高编程效率。 ...
Java技术文档PDF汇总是一个丰富的资源集合,涵盖了Java编程语言及其相关技术领域的核心概念和实践应用。这个压缩包中包括了Java、JavaScript、SSH(Struts、Spring、Hibernate框架的组合)、Oracle数据库以及SQL语言...
"Java语言教学课件汇总整本书电子讲义全套教学教程完整版电子讲义(最新)" Java语言教学课件汇总整本书电子讲义全套教学教程完整版电子讲义是Java语言的入门教学课件,旨在帮助学生和初学者了解Java语言的发展历程、...
Java 汇总学习简介10章节主要涵盖了Java Applet的学习,这是Java编程中的一个重要概念。Java Applet是一种特殊的Java程序,它可以在Web浏览器中运行,为网页添加交互性功能。这一章节的目标是帮助学习者理解和掌握...
### 最全Java面试题汇总(一):详细解析与知识点扩展 #### 1. Java面试题概述 本文将对一份“最全Java面试题汇总”中的部分题目进行详细解析,并结合实际应用场景,深入探讨相关知识点。 #### 2. 题目101:变量...
### Java常见异常汇总 #### 1. `org.apache.commons.collections.SequencedHashMap`签名信息不匹配 **异常描述**:`org.apache.commons.collections.SequencedHashMap` 的签名信息与同包内其他类的签名信息不匹配...
### Java常见问题集锦 #### 1....这些问题覆盖了Java环境配置、开发工具兼容性、浏览器加载Applet、数据库连接、Servlet输出以及Java Web服务器配置等多个方面,旨在帮助开发者更好地理解和解决问题。
Java技术架构图汇总文档对Java技术的架构图进行了系统的总结和归纳,涵盖了多种Java技术架构,包括JVM架构、Spring架构、Hibernate架构、Struts2架构、Struts1架构、J2EE架构、SmartClient架构、Ajax框架架构、...
前者通常独立运行,以main()方法为程序入口,而后者则常用于网页,需要嵌入HTML并通过Appletviewer或支持Java的浏览器运行。 Java程序的工作流程主要包括以下步骤: 1. **编写源文件**:使用文本编辑器编写.java源...
JAVA J2EE基础面试题汇总提供了对JAVA编程语言及其企业级应用框架的深入理解,以下是对给定文件中提到的知识点的详细解析: ### Java的历史背景 Java最初由Sun Microsystems在1995年推出,源于一个名为Green的项目...
安装过程中,JDK会默认安装一套JRE,用于浏览器使用,而JDK本身包含更全面的开发工具。 JDK中包含的关键命令工具有: 1. `java`:启动Java虚拟机(JVM),执行.class文件。 2. `javac`:Java编译器,将源代码编译成...
- `out`:用于输出文本到浏览器。 - `config`:表示Servlet配置。 - `page`:代表当前JSP页面本身。 - `exception`:用于表示错误或异常。 #### Servlet生命周期 Servlet的生命周期包括以下几个阶段: 1. **初始...
Java 技术架构图汇总 Java 技术架构图汇总是一个涵盖了多种 Java 相关技术架构的文档。下面将对文档中的每个架构图进行详细的解释和知识点总结。 JVM 架构 JVM(Java Virtual Machine)是 Java 语言的核心组件之...
在Java面试中,数据库的连接与操作是不可或缺的部分,JDBC(Java Database Connectivity)是Java程序与数据库交互的主要方式。以下是关于JDBC连接数据库的详细流程和原理: 1. 加载数据库驱动:在Java程序中,首先...
- **forward**和**redirect**用于页面跳转,前者是在服务器端完成的,浏览器地址栏不变化;后者是客户端发起新请求,地址栏变化。 ### 内存管理 - **堆**和**栈**是两种不同的内存区域,堆是动态分配内存,采用...
【Java面试题总汇】涵盖了计算机基础、网络、存储、缓存、分布式、安全等多个方面的知识点,这些都是在IT行业中特别是Java开发岗位面试时常见的问题。下面将分别详细讲解这些领域的重点内容。 **计算机基础** 在...
Java 是一种高级编程语言,源自于 C++ 语言的改进和重新设计。它由 Sun Microsystems 的詹姆斯·高斯林(James Gosling)在1990年代初开发,并于1995年正式发布。Java的设计目标是实现跨平台的可移植性,通过“一次...
【Java实验汇总】这篇文档主要涵盖了两个Java实验,旨在帮助学习者深入理解和实践Java编程的基础知识,特别是关于Java应用程序和Applet的使用。实验一和实验二分别关注了不同的编程概念和技术。 实验一的重点在于...