`
ddd_5858
  • 浏览: 28710 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

java版浏览器汇总

 
阅读更多
1.JEditorPane
可以直接把网页文件放上去简单
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嵌套浏览器汇总整理.doc

    java开发可安装程序exe的swing嵌套浏览器汇总整理。。

    Java英文单词汇总

    Java英文单词汇总 Java 英文单词汇总是 Java 语言中广泛使用的一些英文单词的总结,这些单词涵盖了 Java 中的大部分方法的名字。了解这些单词的含义可以帮助开发者更好地理解 Java 语言,并提高编程效率。 ...

    java技术文档 pdf汇总

    Java技术文档PDF汇总是一个丰富的资源集合,涵盖了Java编程语言及其相关技术领域的核心概念和实践应用。这个压缩包中包括了Java、JavaScript、SSH(Struts、Spring、Hibernate框架的组合)、Oracle数据库以及SQL语言...

    Java语言教学课件汇总整本书电子讲义全套教学教程完整版电子讲义(最新).pptx

    "Java语言教学课件汇总整本书电子讲义全套教学教程完整版电子讲义(最新)" Java语言教学课件汇总整本书电子讲义全套教学教程完整版电子讲义是Java语言的入门教学课件,旨在帮助学生和初学者了解Java语言的发展历程、...

    Java 汇总学习简介10

    Java 汇总学习简介10章节主要涵盖了Java Applet的学习,这是Java编程中的一个重要概念。Java Applet是一种特殊的Java程序,它可以在Web浏览器中运行,为网页添加交互性功能。这一章节的目标是帮助学习者理解和掌握...

    最全Java面试题汇总(一)

    ### 最全Java面试题汇总(一):详细解析与知识点扩展 #### 1. Java面试题概述 本文将对一份“最全Java面试题汇总”中的部分题目进行详细解析,并结合实际应用场景,深入探讨相关知识点。 #### 2. 题目101:变量...

    java常见异常汇总

    ### Java常见异常汇总 #### 1. `org.apache.commons.collections.SequencedHashMap`签名信息不匹配 **异常描述**:`org.apache.commons.collections.SequencedHashMap` 的签名信息与同包内其他类的签名信息不匹配...

    Java常见问题集锦

    ### Java常见问题集锦 #### 1....这些问题覆盖了Java环境配置、开发工具兼容性、浏览器加载Applet、数据库连接、Servlet输出以及Java Web服务器配置等多个方面,旨在帮助开发者更好地理解和解决问题。

    java技术架构图汇总.docx

    Java技术架构图汇总文档对Java技术的架构图进行了系统的总结和归纳,涵盖了多种Java技术架构,包括JVM架构、Spring架构、Hibernate架构、Struts2架构、Struts1架构、J2EE架构、SmartClient架构、Ajax框架架构、...

    Java语言教学课件汇总整本书电子教案全套教学教程完整版电子教案.pptx

    前者通常独立运行,以main()方法为程序入口,而后者则常用于网页,需要嵌入HTML并通过Appletviewer或支持Java的浏览器运行。 Java程序的工作流程主要包括以下步骤: 1. **编写源文件**:使用文本编辑器编写.java源...

    JAVA J2EE基础 面试题汇总

    JAVA J2EE基础面试题汇总提供了对JAVA编程语言及其企业级应用框架的深入理解,以下是对给定文件中提到的知识点的详细解析: ### Java的历史背景 Java最初由Sun Microsystems在1995年推出,源于一个名为Green的项目...

    java网址汇总.pdf

    安装过程中,JDK会默认安装一套JRE,用于浏览器使用,而JDK本身包含更全面的开发工具。 JDK中包含的关键命令工具有: 1. `java`:启动Java虚拟机(JVM),执行.class文件。 2. `javac`:Java编译器,将源代码编译成...

    java面试题和基础知识汇总超详细

    - `out`:用于输出文本到浏览器。 - `config`:表示Servlet配置。 - `page`:代表当前JSP页面本身。 - `exception`:用于表示错误或异常。 #### Servlet生命周期 Servlet的生命周期包括以下几个阶段: 1. **初始...

    java技术架构图汇总.doc

    Java 技术架构图汇总 Java 技术架构图汇总是一个涵盖了多种 Java 相关技术架构的文档。下面将对文档中的每个架构图进行详细的解释和知识点总结。 JVM 架构 JVM(Java Virtual Machine)是 Java 语言的核心组件之...

    java面试题汇总.docx

    在Java面试中,数据库的连接与操作是不可或缺的部分,JDBC(Java Database Connectivity)是Java程序与数据库交互的主要方式。以下是关于JDBC连接数据库的详细流程和原理: 1. 加载数据库驱动:在Java程序中,首先...

    JAVA面试题汇总.pdf

    - **forward**和**redirect**用于页面跳转,前者是在服务器端完成的,浏览器地址栏不变化;后者是客户端发起新请求,地址栏变化。 ### 内存管理 - **堆**和**栈**是两种不同的内存区域,堆是动态分配内存,采用...

    java面试题总汇(计算机基础、网络、存储、缓存、分布式、安全)

    【Java面试题总汇】涵盖了计算机基础、网络、存储、缓存、分布式、安全等多个方面的知识点,这些都是在IT行业中特别是Java开发岗位面试时常见的问题。下面将分别详细讲解这些领域的重点内容。 **计算机基础** 在...

    java笔试题汇总[归类].pdf

    Java 是一种高级编程语言,源自于 C++ 语言的改进和重新设计。它由 Sun Microsystems 的詹姆斯·高斯林(James Gosling)在1990年代初开发,并于1995年正式发布。Java的设计目标是实现跨平台的可移植性,通过“一次...

    JAVA实验汇总[归纳].pdf

    【Java实验汇总】这篇文档主要涵盖了两个Java实验,旨在帮助学习者深入理解和实践Java编程的基础知识,特别是关于Java应用程序和Applet的使用。实验一和实验二分别关注了不同的编程概念和技术。 实验一的重点在于...

Global site tag (gtag.js) - Google Analytics