在前面《 代理模式Image Proxies(一、最朴素实现) 》中,代理类如下:
package com.oozinoz.imaging;
/*
* Copyright (c) 2001, 2005. Steven J. Metsker.
*
* Steve Metsker makes no representations or warranties about
* the fitness of this software for any particular purpose,
* including the implied warranty of merchantability.
*
* Please use this software as you wish with the sole
* restriction that you may not claim that you wrote it.
*/
import java.awt.*;
import javax.swing.*;
/**
* This class acts as a proxy for another ImageIcon. In "The Design Patterns
* in Java" we wind up tearing out this class, preferring the techniques
* used in the ImageIconLoader class.
* @author Steven J. Metsker
* @see LoadingImageIcon
*/
public class ImageIconProxy extends ImageIcon implements Runnable {
static final ImageIcon ABSENT = new ImageIcon(ClassLoader.getSystemResource("images/absent.jpg"));
static final ImageIcon LOADING = new ImageIcon(ClassLoader.getSystemResource("images/loading.jpg"));
ImageIcon current = ABSENT;
protected String filename;
protected JFrame callbackFrame;
/**
* Construct an ImageIconProxy that will (on demand) load the image in the
* provided file.
* @param filename the name of a file to load
*/
public ImageIconProxy(String filename) {
super(ABSENT.getImage());
this.filename = filename;
}
/**
* Load the desired image and call back the provided frame when done.
* @param JFrame the frame to repaint when the image is loaded
*/
public void load(JFrame callbackFrame) {
this.callbackFrame = callbackFrame;
current = LOADING;
callbackFrame.repaint();
new Thread(this).start();
}
/**
* Load the desired image (presumably in a separate thread).
*/
public void run() {
current = new ImageIcon(ClassLoader.getSystemResource(filename));
callbackFrame.pack();
}
/**
* @return the height of the Icon
*/
public int getIconHeight() {
return current.getIconHeight();
}
/**
* @return the width of the Icon
*/
public int getIconWidth() {
return current.getIconWidth();
}
/**
* Paint the Icon
*/
public synchronized void paintIcon(Component c, Graphics g, int x, int y) {
current.paintIcon(c, g, x, y);
System.out.println("paintIcon()");
}
}
其中,后面三个方法getIconHeight()、getIconWidth()、paintIcon(...)都是在覆盖父类ImageIcon的方法,下面的改进主要目的在于:
“不把绘图请求转发给父类ImageIcon对象,而是直接操作ImageIcon中的Image对象,更加简便”。(注意到一个ImageIcon对象内部封装了一个Image对象,在ImageIcon构造函数就可以看出,另外ImageIcon类还有setImage()方法)
改进后有两个类:ShowLoader和LoadingImageIcon,其中后者是代理。当前者在内部调用loader.load(frame);时,后者会更换自己内部的图片,重新显示窗口。具体代码见附件。
分享到:
相关推荐
NULL 博文链接:https://chuanwang66.iteye.com/blog/1069268
NULL 博文链接:https://chuanwang66.iteye.com/blog/1137037
如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求: import requests proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } requests.get(...
Laravel开发-laravel-valid-proxies Laravel有效代理
用Proxies实现对象撤消,使重做和更改历史记录
代理ip池(自动采集ip地址 从网站获取ip地址,检测是否可用,并实时更新,存入数据库中) 代理ip池(自动采集ip地址 从网站获取ip地址,检测是否可用,并实时更新,存入数据库中)
资源分类:Python库 所属语言:Python 资源全名:proxies_l-0.0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
利用 MySQL proxies_priv(模拟角色)实现类似用户组管理 角色(Role)可以用来批量管理用户,同一个角色下的用户,拥有相同的权限。 MySQL5.7.X以后可以模拟角色(Role)的功能,通过mysql.proxies_priv模拟实现 1、...
Koa代理 middlware HTTP代理 由提供支持。 安装 $ npm install koa-proxies --save 选件 http-proxy活动 options . events = { error ( err , req , res ) { } , proxyReq ( proxyReq , req , res ) { } , ...
代理人 Tokio堆栈的代理协议。 用法 查看服务器和客户端示例的examples/目录。 地位 http 服务器端 客户端 袜子5 服务器端 客户端
Trusted Proxies GeoSet工具栏允许您快速连接到Trusted Proxies帐户上的任何代理服务器。 使用“受信任的代理” GeoSet工具栏,您可以在“受信任的代理”帐户上的所有地理位置代理之间无缝切换。 还没有Trusted ...
* OutputFilecheck proxies.json valid_proxies.jsonfilter valid_proxies.json <HTTP> output.json例如: 搜寻所有受支持的网站并将代理保存到proxies.json crawl proxies.json爬网并将代理保存到proxies.json: ...
A simple source code to explain how to scrape proxies in Delphi.
weird_proxies:反向代理备忘单
java动态代理,j-dynproxies-source
要判断客户端是否使用代理服务器,可以从客户端所发送的环境变量信息来判断。 具体来说,就是看HTTP_VIA字段,如果这个字段设置了,...二、使用透明代理服务器的情况:Transparent Proxies REMOTE_ADDR = 代理服务器
另一个代理客户端源码,基于c#,.net框架,代码相交简单。比较实用
Proxies For Removing Fxcking Ads(以下简称 PFRFA),顾名思义,依靠代理,实现中间人劫持删除那些傻x的广告