网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  用java创建带图标和缩进的jcombobox     
  文章作者:未知  文章来源:水木森林  
  查看:174次  录入:管理员--2007-11-17  
 
  默认的jcombobox无法在每个条目上显示图标、缩进等样式。但是swing的mvc设计结构为各种组件提供了无与伦比的可扩展性。为了实现这一点,我们可以创建一个新的renderer来负责每个条目的绘制。

首先我们新写一个类imagedcomboboxitem,它封装了一个下拉条目的信息,包括图标、文字、缩进等:

class imagedcomboboxitem {
private icon icon = null;
private string text = null;
private int indent = 0;

imagedcomboboxitem(string text, icon icon, int indent) {
this.text = text;
this.icon = icon;
this.indent = indent;
}

public string gettext() {
return text;
}

public icon geticon() {
return icon;
}

public int getindent() {
return indent;
}
}

然后新建jimagedcombobox类并从jcombobox继承。在构造函数中,新建一个defaultlistcellrenderer作为新的renderer,并覆盖其getlistcellrenderercomponent方法。在新的getlistcellrenderercomponent方法中,首先依旧调用父对象的该方法,以便完成普通条目的绘制;然后判断条目是否是imagedcomboboxitem实例。如果是,则显示imagedcomboboxitem的文字、图标,并显示缩进。为了更方便的显示左侧缩进,我们直接创建一个emptyborder并设置左侧缩进数量,并设置到defaultlistcellrenderer中。defaultlistcellrenderer从jlabel继承而来,所以可直接接受各种border。这里我们以每个缩进10象素为例。

好了,以下是完整代码:

import java.util.*;

import java.awt.*;
import javax.swing.*;

public class jimagedcombobox extends jcombobox {
public jimagedcombobox(vector values) {
super(values);
listcellrenderer renderer = new defaultlistcellrenderer() {
public component getlistcellrenderercomponent(
jlist list,
object value,
int index,
boolean isselected,
boolean cellhasfocus) {
super.getlistcellrenderercomponent(list, value, index, isselected, cellhasfocus);
if (value instanceof imagedcomboboxitem) {
imagedcomboboxitem item = (imagedcomboboxitem) value;
this.settext(item.gettext());
this.seticon(item.geticon());
if (ispopupvisible()) {
int offset = 10 * item.getindent();
this.setborder(borderfactory.createemptyborder(0, offset, 0, 0));
}
}
return this;
}
};
this.setrenderer(renderer);
}

public static void main(string[] args) {
jframe frame = new jframe();
frame.setsize(400, 400);
vector values = new vector();
icon openicon = new imageicon(jimagedcombobox.class.getresource("open16.gif"));
icon newicon = new imageicon(jimagedcombobox.class.getresource("new16.gif"));
for (int i = 0; i < 5; i++) {
values.addelement(new imagedcomboboxitem("directory " + i, openicon, i));
}
for (int i = 0; i < 5; i++) {
values.addelement(new imagedcomboboxitem("image item " + i, newicon, 5));
}
jimagedcombobox combobox = new jimagedcombobox(values);
frame.getcontentpane().add(combobox, borderlayout.north);
frame.show();
}
}

class imagedcomboboxitem {
private icon icon = null;
private string text = null;
private int indent = 0;

imagedcomboboxitem(string text, icon icon, int indent) {
this.text = text;
this.icon = icon;
this.indent = indent;
}

public string gettext() {
return text;
}

public icon geticon() {
return icon;
}

public int getindent() {
return indent;
}
}

其中,两个图标在这里 :open16.gif,new16.gif
 
 
上一篇: 用java程序获取绝对路径    下一篇: 用java创建带图像的菜单
  相关文档
(9)midp api 11-17
java静态变量 11-17
关于java栈与堆的思考 11-16
j2se综合:java正则表达式4种常用功能 12-25
jfc/swing活学活用之jlabel文字魔法 11-16
eclipseform程序设计快速入门 11-17
基于jcom搭建java-微软信息桥梁(上) 11-17
讲解关于编写跨平台java程序时的注意事项 11-17
在web应用中使用xml文件配置数据源 11-17
命令行参数 11-17
且看微软的.net和sun公司的j2ee如何对垒(2) 11-17
win2000下apache2与tomcat5的整合配置 11-16
返回中文unicode的byte字符串 11-17
java语言中两种异常的差别 11-16
事件监听器:将javabeans接通起来的方法 11-17
java核心代码例程之:simpleapplet.java 11-17
创建布局管理器 11-17
struts 和 tiles 辅助基于组件的开发(5) 11-17
分享java类初始化顺序,经典例程 11-17
java中的17种常用正则表达式归纳 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息