一个ButtonDemo序(遇到的问题,以及在大牛的帮助下,如何解决的。)
问题1:
public ButtonDemo(){
//ImageIcon leftButtonIcon=new ImageIcon("images/a.png");
ImageIcon leftButtonIcon=createImageIcon("images/a.png");
ImageIcon middleButtonIcon=createImageIcon("images/middle.png");
ImageIcon rightButtonIcon=createImageIcon("images/right.gif");
首先清楚程序的基本结构。上面的ButtonDemo()到现在,我刚发现原来是主类的构造函数。在主类里面初始化了很多实例变量。
路径的寻址问题:
TT开始以为createButtonIcon是ImageIcon类中自带的方法,结果搜了八年没有搜到。后来在程序的后面发现了这个方法,原来是作者自己定义的。原来这样也可以啊。稍稍感觉大脑转的有点慢啊。
protected static ImageIcon createImageIcon(String path){
java.net.URL imgURL=ButtonDemo.class.getResource(path);
if(imgURL !=null){
return new ImageIcon(imgURL);
}else{
System.out.println("Couldn't find file:"+path);
return null;
}
}
尤其是红字的部分,有点坑啊,压根看不懂红色的部分是什么意思。在此,笔者打算去百度上搜一搜。哈哈,动一动手指头,结果一搜就搜到答案了。答案如下:
就是java.net.URL类 声明一个它的对象imgURL 而这个对象是指向ButtonDemo.class.getResource(path) 也就是imgURL 的值就是ButtonDemo.class.getResource(path)
我仔细想了想,这个形式其实还是一般的定义对象的形式。只是java.net.URL容易把人唬住了。我想作者之所以把原程序这样写,是为了方便理解,如果仅仅是写URL可能会让大家一头雾水。
java.lang.Class.getResource()这主要是做什么用的?
答:ButtonDemo.class.getResource(path);可能代表的是class在这里,其实也是一个类名称。
java.lang.class.getResource()。
getResource
public URL getResource(String name)查找带有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托给此对象的类加载器。
如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResource(java.lang.String)。
在委托前,使用下面的算法从给定的资源名构造一个绝对资源名: 如果 name 以 '/' ('\u002f') 开始,则绝对资源名是 '/' 后面的 name 的一部分。
否则,绝对名具有以下形式:
modified_package_name/name
其中 modified_package_name 是此对象的包名,该名用 '/' 取代了 '.' ('\u002e')。
这就是我需要的,唉呀妈呀,太浪费时间了。不好不好。 参数:
name - 所需资源的名称
返回:
一个 URL 对象;如果找不到带有该名称的资源,则返回 null
从以下版本开始:
JDK1.1
TT的回答:
在这个问题中:
工程包所在的地址是下面这个地址:
D:\Program Files\Eclipse\workspace\First_GUI
所以程序中直接写的是相对地址。陈l同学说一般都写相对地址,因为程序移植的时候,就不用再更改绝对地址了。
//ImageIcon leftButtonIcon=new ImageIcon("images/a.png");
ImageIcon leftButtonIcon=createImageIcon("images/a.png");
ImageIcon middleButtonIcon=createImageIcon("images/middle.png");
ImageIcon rightButtonIcon=createImageIcon("images/right.gif");
问题2:不用重新创建createImageIcon,直接使用原有的构造函数就可以了。
答:ImageIcon leftButtonIcon=new ImageIcon("images/a.png");
问题3:你引用的图片的大小需要自己进行设置,否则会比较大的哦。

一个ButtonDemo序(遇到的问题,以及在大牛的帮助下,如何解决的。)的更多相关文章
- 关于“找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上。”的解决
关于“找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上.”的解决 一个项目需要在Win系统用计划任务执行PHP,写了个批处理bat利用php-cgi.ex ...
- spring 默认情况下事务是惟一的 同一个方法里面第一个sql开启后 在执行完 将事务传递给下一个sql
spring 默认情况下事务是惟一的 同一个方法里面第一个sql开启后 在执行完 将事务传递给下一个sql
- 您好,python的请求es的http库是urllib3, 一个请求到贵司的es节点,想了解下,中间有哪些网关啊?冒昧推测,贵司的部分公共网关与python-urllib3的对接存在异常?
您好,python的请求es的http库是urllib3, 一个请求到贵司的es节点,想了解下,中间有哪些网关啊?冒昧推测,贵司的部分公共网关与python-urllib3的对接存在异常? 负载均衡( ...
- 最近研究了一个.NET的DHT网络搜索引擎,顺便重新整理了下引擎思路,供大家分享讨论下。
最近研究了一个.NET的DHT网络搜索引擎,顺便重新整理了下引擎思路,供大家分享讨论下.
- C语言两个升序递增链表逆序合并为一个降序递减链表,并去除重复元素
#include"stdafx.h" #include<stdlib.h> #define LEN sizeof(struct student) struct stud ...
- 一个ButtonDemo的实现过程。
来自JDK API 1.6.0: Try this: Click the Launch button to run the Button Demo using Java™ Web Start (dow ...
- python 根据两个字段排序, 一个升序, 一个降序
from collections import Counter c = Counter(input()) l=sorted(c.items(), key=lambda s:(-s[], s[])) ] ...
- iosselect:一个js picker项目,在H5中实现IOS的下拉效果
iosselect是在webapp下的一个picker组件,可以轻松实现各类选择器效果.比如地区选择 时间选择 日期选择等. 下面是一个地址选择器demo截图,可以访问:http://zhoushen ...
- database first表更新一个表会更新所有的model,包括添加验证代码,解决办法
因为model类是自动生成的,重新生成后会覆盖自己的修改.一个比较合理做法,就是用 partial class的方式来实现. 比如有一个Model类: Movie.那我们就可以添加一个局部类文件,局部 ...
随机推荐
- Python日志统计
#!/usr/bin/env python # coding:utf-8 import sys,time class DisplayFormat(object): def form ...
- Buffer 和Cache 的区别
Buffer 和Cache 的区别buffer 与cache 操作的对象就不一样.buffer
- 【机器学习】集成学习之xgboost的sklearn版XGBClassifier使用教程
XGBClassifier是xgboost的sklearn版本.代码完整的展示了使用xgboost建立模型的过程,并比较xgboost和randomForest的性能. # -*- coding: u ...
- Gym - 100623J Just Too Lucky (数位dp)
给定n∈[1,1e12],求1到n的所有整数中,各位数字之和能整除它本身的数的个数. 这道题与UVA-11361类似,假如设dp[u][lim][m1][m2]为枚举到第u位(从低到高数),是否受限, ...
- Python函数-cmp()
cmp(x, y) 作用: 比较两个对象x和y,如果x < y ,返回负数:x == y, 返回0:x > y,返回正数. 注:在python2所有版本中都可用,但在pyt ...
- JavaScript正则常用知识总结
一.JavaScript正则相关方法 str.match(regexp)与regexp.exec(str)功能类似. str.search(regexp)与regexp.test(str)功能类似. ...
- UITableView常见用法以及注意细节
UITableView用途广泛,而且多样化,其中有一些不太常用,用到的话需要去查资料,今天边用边记录下来 *第一发:UITableViewCell 分割线 1. 分割线样式 [self.tableVi ...
- Pager分页
分页组件: /// <summary> /// 分页组件 /// </summary> public class PagerHelper { /// <summary&g ...
- [转载]get_fs()和set_fs()
其实内核里面也可以用系统调用的,直接用read/write是可以的.但要注意几个问题:一个是要记得编译的时候加上-D__KERNEL_SYSCALLS__另外源文件里面要#include如果报错,很可 ...
- 关于HTML标签中的一些容易忘记常用样式属性
样式说明--样式: margin, margin-top/left/bottom/right -- 外边距; padding, padding-top/left/botton/right -- 内边距 ...