首页 > 代码库 > Applet 之 JAVA入门探索

Applet 之 JAVA入门探索

练习

前提,公司战略方向改变需要技术从.net转向java于是自学了一点java 发现基础部分很多相似之处当然也有很多很多的不同之处 比如 对已string类型 单引号与双引号敏感 等等这里就不一一说明啦,来看看这第一次写的一个小程序.

环境信息:win server 2008 R2 开发工具 Eclipse  4.3.0 

要求:实现简单图片查看功能

直接上代码: 

import java.awt.EventQueue;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class HelloWord {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
    EventQueue.invokeLater(new Runnable() {
		
		@Override
		public void run() {
			// 开始运行
			JFrame frame=new ImageViewerFrame();
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frame.setVisible(true);
		}
	});
	}
}
//显示图片
class ImageViewerFrame extends JFrame{
	public ImageViewerFrame() {
		setTitle("图片查看");
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		
		//创建label去储存图片
		label=new JLabel();
		add(label);
		
		//选择文件
		chooser=new JFileChooser();
		chooser.setCurrentDirectory(new File("."));
		
		//设置按钮
		JMenuBar menuBar=new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu menu=new JMenu("文件");
		menuBar.add(menu);
		
		JMenuItem opItem=new JMenuItem("打开");
		menu.add(opItem);
		opItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// 显示选择按钮
				int result=chooser.showOpenDialog(null);
				//如果已选择文件就显示在lab中
				if (result==JFileChooser.APPROVE_OPTION) {
					String name=chooser.getSelectedFile().getPath();
					label.setIcon(new ImageIcon(name));
				}
			}
		});
		JMenuItem exitItem=new JMenuItem("退出");
		menu.add(exitItem);
		exitItem.addActionListener( new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// 执行退出
				System.exit(0);
			}
		});
	}
	
	private JLabel label;
	private JFileChooser chooser;
	private static final int DEFAULT_WIDTH=300;
	private static final int DEFAULT_HEIGHT=400;
}

  这段代码来自 <JAVA核心技术-卷1基础知识> ,开始看起来的时候很多地方能看懂(可能是有.net基础的原因)感觉特别像.net写webform包括创建按钮,增加按钮功能等等,而其中的引用 土话.dll文件 相当于 java中的包,引用方式大致相同, 从头来分析一下这个段代码:

    首先是程序引用,.net叫引用程序集 .net中实现方法的复用,程序之间相互调用首先需要添加该程序的引用到程序集中,然后从bin目录中添加该.dll文件地址 这样把文件引用到当前项目中重新生成.csproj之后,凡是添加该引用的项目都可以访问到这个方法或这个项目,而java引用包这方面有四种引用方式,原理大致与.net差不多 更简单的是比如导入同一项目中的很多包 可以用*代替,例如import java.lang.*也就是引用java.lang下所有的包,有点像.net的命名空间,不用写具体哪个命名空间 哪个类balabala..

   其他的main函数啊,void static之类的就不多说了,这里就深入说一下EventQueue.invokeLater这个,首先介绍一下EventQueue这个 查阅了相关资料 个人是这个意思,它是swing  中GUI重要的组成部分他主要负责AWTEvent事件分发机制,就像是个物流中心,当有事件触发时候系统会把这个事件发送到物流中心 方便他再次分发,而参考文章中提到这个事件分发机制实际上是同步分发机制,也就意味着如果时间多的时候需要排队等待,当我第一次看到invokeLater这个方法时候 第一反应是.net中的委托常用的BeginInvoke/Invoke 异步/同步 执行使用委托的原因常常是因为有回调函数这点与windows的GUI机制不谋而合,好处显而易见执行完成之后会自动清除,保证程序可确定性,减少其他程序类入侵.

   程序继续执行ImageViewerFrame,创建当前窗口关闭按钮,显示当前窗口,重要的是下面创建该窗口 与.net创建方式大致相同包括 按钮,按钮功能设定,这段代码中重写了打开文件与关闭方法,有语言功底的孩子硬很轻松能读懂,监听读取文件事件然后重新显示在矿体内部.

  技术分享

Applet 之 JAVA入门探索