作者:秦乐0_707 | 来源:互联网 | 2023-12-11 21:03
本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。
swing组件及其用法,swing组件定义在
4.4图标接口
图标接口用来将图标与各种组件相关联。一个图标可以是简单的绘画或者是使用图标类由磁盘所载入的GIF格式格式图像。这个接口包含描述尺寸的两个属性以及一个用来绘制图标的方法。
公共界面图标{
//属性
public int getIconHeight();
public int geticonvwidth();
//其他方法
公共void paintIcon(组件c,图形g,int x,int y);
}
4.4.1 创建图标
图标的创建非常简单,只需要简单的实现接口。我们所需要做的就是指定图标的尺寸以及要绘制的内容。列表4-3演示了一个图标的实现。这个图标是一个菱形图标,其尺寸,颜色以及填充状态都是可以配置的。
包swingstudy.ch04
导入Java。awt。颜色;
导入Java。awt。组件;
导入Java。awt。图形;
导入Java。awt。多边形;
导入javax。挥棒。图标;
公共类钻石形实现图标{
私彩色彩;
选择了私有布尔值;
私有int宽度;
私有int高度;
私有多边形多边形;
private static final int DEFAULT _ WIDTH=10;
private static final int DEFAULT _ HEIGHT=10;
公共钻石(颜色颜色){
this(color,true,DEFAULT_WIDTH,DEFAULT _ HEIGHT);
公共菱形图标(颜色颜色,布尔选择){
这(颜色,选定,默认_宽度,默认_高度);
public DiamondIcon(Color color,boolean selected,int width,int height) {
this.color=color
this.selected=已选择
this.width=宽度;
this.height=高度;
初始化多边形();
私有void initPolygon() {
多边形=新多边形();
int半宽度=宽度/2;
int half height=height/2;
polygon.addPoint(0,半高);
polygon.addPoint(半宽,0);
polygon.addPoint(宽度,半高);
polygon.addPoint(半宽,高度);
@覆盖
public int getIconHeight() {
//TODO自动生成的方法存根
返回高度;
@覆盖
public int geticonvwidth(){
//TODO自动生成的方法存根
返回宽度;
@覆盖
public void paintIcon(Component c,Graphics g,int x,int y) {
//TODO自动生成的方法存根
g.setColor(颜色);
g.translate(x,y);
如果(选中){
g .填充多边形(多边形);
否则{
g .绘制多边形(多边形);
g.translate(-x,-y);
}
4.4.2 使用图标
一旦我们有了图标的实现,使用图标就如何查看一个组件具有相应的属性一样简单。例如,下面的代码创建了一个具有图标的标签:
图标图标=新的钻石图标(颜色。红色,真实,25,25);
JLabel label=new JLabel(icon);
图4-10显这个标签的运行结果。
4.4.3图像图标类
图标类提供了由AdvancedWasteTreatmentofwater高次废水处理图像对象创建图标的图标接口实现,图像对象可以来自内存(字节[]),来自磁盘(文件名)或是来自网络(网址).与普通的图像对象不同,图像图标的载入是当图标被创建时立即启动的,尽管当使用时他也许还没有完全载入。另外,与图像对象不同,图像图标对象是可序列化的,所以他们可以很容易为JavaBean组件所使用。
创建图标
有九个构造函数可以用于创建图像图标:
公共图像图标()
icon icon=新图像icon();
图标。setimage(anImage);
公共图像图标(图像图像)
icon icon=新图像图标(anImage);
公共图像图标(字符串文件名)
图标图标=新图像图标(文件名);
公共图像图标(网址位置)
图标图标=新图像图标(网址);
公共图像图标(字节图像数据[])
icon icon=新图像图标(aByteArray);
公共图像图标(图像图像,字符串描述)
Icon icon=new ImageIcon(anImage, Duke );
公共图像图标(字符串文件名,字符串描述)
Icon Icon=新图像icon(文件名,文件名);公共图像图标(网址位置,字符串描述)
Icon icon=新图像Icon(url,位置。getfile());
公共图像图标(网址位置,字符串描述)
Icon icon=新图像Icon(url,位置。getfile());
公共图像图标(字节图像数据[],字符串描述)
icon icon=新图像图标(aByteArray, Duke );
无参数的构造函数创建一个未初始化的版本。其余的八个构造函数提供了由图像,字节数组,文件名字串(字符串)或是URL,带有或是不带有描述来创建图像图标(图像图标)的功能。
使用图像图标(图像图标)
使用图像图标(图像图标)就如同使用图示一样简单:仅需要创建图像图标(图像图标)并将其组件相关联。
图标=新建图像图标(‘警告。gif’);
JLabel标签3=新建JLabel(Warning ,icon,JLabel).中心)
图像图标(图像图标)属性
表10月四日显示了图像图标(图像图标)的六个属性。图标的高与宽是实际的图像(图片)对象的高与宽。imageLoadStatus属性表示由隐藏媒体跟踪器载入图像图标(图像图标)的结果,或者是媒体跟踪者。中止,媒体跟踪者。错误,媒体追踪器。完成任务。
图像图标(图像图标)属性
有时使用图像图标(图像图标)来载入一个图像(图片),然后由图像(图片)对象获取图示是十分有用的。
图像图标图像图标=新映像图标(-我.);
图像图像=图像图标。getimage();
使用图像图标(图像图标)对象时有一个主要问题:使用图标的图像与类文件都是由恰恰相反文件载入时,他们不能工作,除非我们为恰恰相反中的文件指定了完全的URL(网址).我们不能仅仅指定文件名为一个字串(字符串)并使得图像图标(图像图标)查找这个文件。我们必须首先手动获取图像数据,然后将这些数据传递给图像图标(图像图标)构造函数。
为了解决在恰恰相反文件外部载入图像,列表四比四显示了一个图像加载器(映像加载程序)类,这个类提供了一个公共静态图像getimage(类相对类,字符串文件名)方法。我们同时指定图像文件相对的基类以及图像文件的名字。然后我们只需要将返回的图像(图片)对象传递给图像图标(图像图标)的构造函数。
摇摆研究。ch 04软件包:
导入java.awt.Image:
导入java.awt.Toolkit:
导入java。io。bufferedinputstream:
导入java.io.ByteArrayOutputStream:
导入java。超正析象管异常:
导入java.io.InputStream:
公共类图像加载器
私有图像加载程序()
公共静态图像getimage(类相对类,字符串文件名)}
图像returnValue=null:
输入流是=相对类。getresourcestream(文件名):
如果(是!=null)>
缓冲区数据流至=新缓冲区edinpertstream(是);
bytearray输出流baos=new bytearray输出流();
尝试[
内部通道
while ((ch=bis.read())!===1)}
宝钢。书写(ch);
返回值=工具包。getdefaulttoolkit().创建图像(baos。托比数组());
catch(io异常e)}
系统。呃。println(加载时出错:“文件名”;
返回值(返回值):
}
下面的代码显示如何使用这个帮助类:
图像警告图像=图像加载器。getimage(标签jarsample。类,“警告。gif”);
警告图示=新影像图示(警告影像):
JLabel标签2=新建JLabel(警告图标);
灰色滤镜类
另一个值得一提的类就是格莱菲过滤器类。许多摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆摇摆组件依赖这个类来创建一个禁止的图像(图片)版本用作图标。组件自动使用这个类,但是有时我们需要使用阿瓦特的图像过滤器(图像过滤器)类实现灰度平衡。我们可以通过调用类的一个方法将一个图像(图片)由普通形式转换为灰度形式-公共静态图像可编辑图像。
正常映像=-我.
灰色图像图像=格雷菲尔特。createdisabledimage(普通图像)
现在我们可以使用一个灰色的图像作为组件的图标:
图标警告图标=新建图像图标(灰度图像);
JLabel警告Label=新jlabel(警告图标);