- 浏览: 18745 次
最新评论
【场景】:在一个列表中,可以通过输入某个字符,而动态过滤列表中项的显示。当然,动态显示的项都是包含用户输入的字符!在此,实现的功能非常简单,没有更 多的复杂逻辑。仅是为学习者提供一些案例。可以从中进行自己需要的扩展。
【关系图】: 在Swing中,想构建自己的组件,最简单的就是继承现有的组件,再做可定制的功能扩展,也不需要做太多额外的工作,因为Swing为我们提供了良好的可 扩展性。上图,简略的说明了待开发的可过滤的列表关系类图。以下做一些简单的描述:
【FilteredList】:继承了JList,其中类FilteredModel与FilteredTextField是他的内部类实现。在这里使用 内部类是为了能够方便的访问到FilteredList外部数据,减少了与外部类的交互,在此不能确定的说这种方式是好是坏,其中的衡量就留给用户了。
【FilteredModel】:继承了AbstractListModel,FilteredList中的内部类,并作为其的一个属性存在。作用是保存 展现在列表中的数据,并且能做动态更新。
【FilteredTextField】:继承了JTextFiled,很显然的就是一个输入框,只是实现了一个DocumentListener接口, 做到实时监听用户输入的任何动作:插入、删除、修改等。在用户触发这个监听时,就需要和FilteredModel进行交互,动态变化 FilteredList中的数据显示。
【编码实现】
FilteredModel :
在这个Model中主要的是设置一个filteredItems 属性,用来保存包含了用户输入字符的列表项;另一个items属性,保存列表原始的所有项。关键的算法是方法refilter():实时对用户输入进行过 滤,并把结果添加到filteredItems 中。
private class FilterModel extends AbstractListModel {
private List items;
private List filteredItems;
public FilterModel() {
items = new ArrayList();
filteredItems = new ArrayList();
}
public void addElement(Object o) {//添加一个项到列表中
items.add(o);
refilter();//每添加一个项就更新filterItems
}
private void refilter() {
filteredItems.clear();
String item = getFilterField().getText();
for (int i = 0; i 组件作为其属性。并更换Model。 使用自己实现的具有可过滤功能的Model。
下面是一段测试代码:
public static void main(String[] args) {
String[] listItems = { "Chris", "Joshua", "Daniel", "Michael", "Don",
"Kimi", "Kelly", "Keagan" };
JFrame frame = new JFrame("FilteredJList");
frame.getContentPane().setLayout(new BorderLayout());
// populate list
FilteredHistoryList list = new FilteredHistoryList();
for (int i = 0; i 组件类,如此就能复用很多特性。我们需要的是JList上加一层额外的功能,那么当然需要继承自 JList,使他俩具有血缘关系啦,方便管理吗!从这里也可以感受到Swing编码的一种感觉:数据与展示层划分清晰,展示与数据没有耦合在一块。当然, 可以说,在这个例子中没有做的很好,也没有作出具体的层次优化,读者可以自己试一试……
【参考资料】:《Swing Hacks》 By Chris Adamson , Joshua Marinacci
发表评论
-
(转载)C++中枚举与字符串相互转换
2012-07-06 09:52 4133有的时候我们喜欢使用一些外部的文件保存管理一些配置信息,这 ... -
awk教程
2012-07-06 09:45 603一个年轻的程序员问一个老程序员(一个比较牛逼的公司的CTO ... -
正则表达式中附加参数的用法
2012-07-06 09:38 614附件参数g的用法: 1)对于表达式对象的exec方法, ... -
asp.net gridview美化
2012-07-06 09:30 1273i am now in university(HIT@We ... -
javascript js 删除表格的行、单元列
2012-07-05 20:45 649大发现,大家在贴代码的时候。系统会自动加上一些代码或注释之 ... -
Flex应用程序背景颜色渐变
2012-07-02 12:29 617今天突然看见CSDN一个美女高手写的小东西,发现Flex背 ... -
Flex操作Json数据示例
2012-07-02 12:29 679Flex操作Json数据示例 本示例中需要用到JSO ... -
FLEX4中 获取JSON数据的一个例子
2012-07-02 12:29 790公司要求使用JSON格式来获取服务器端的数据 通过 ... -
Flex获取操作XML示例
2012-07-02 12:28 532/****** ".",&qu ... -
Flex 4 Canvas backgroundImage 问题
2012-07-02 12:28 742倾听,慎言,勇行,自省... ... -
GNU Make 中文手册v3.8 学习 ( 3/3 )
2012-07-01 10:05 1018GNU Make 中文手册v3.8 学习 ( 3/3 ) ... -
Web前端开发之“常见模块你真的很了解吗?”
2012-07-01 10:05 746标题和内容模 ... -
Lex和yacc工具介绍
2012-07-01 10:05 916在编译过程中,词 ... -
谈谈我对未来的想法吧
2012-07-01 10:05 682来总行珠海研发中 ... -
终于搞清楚了Flex到底是收费还是免费
2012-06-30 16:30 1616终于搞清楚了Flex到底是收费还是免费 2010年06月29 ... -
结合实际项目谈谈Extjs、Flex、Jquery等富因特网时代框架的用武之处
2012-06-30 16:30 672结合实际项目谈谈Extjs ... -
全面认识Flex安全沙箱
2012-06-30 16:30 604全面认识Flex安全沙箱 2 ... -
为Flex应用添加实时组件
2012-06-30 16:30 459为Flex应用添加实时组件 2011年06月30日 在很 ... -
Flex socket通信实践学习笔记(2)-1
2012-06-30 16:30 622Flex socket通信实践学习 ...
相关推荐
Java Swing组件:Jlist学习笔记Java Swing组件:Jlist学习笔记
swing中的jlist 代码中定义了两个jlist 从一个jlist双击列表项可以将该项从这个列表删除并添加至另外一个列表中去
javaswing更酷的Jlist.pdf
swing JList 拖拽记录到 JTable
实现Jlist带上了图片标签 主要用上了ListCellRenderer
JList是Swing库提供的一个用于显示列表数据的组件,它可以显示单个或多个项目,并且允许用户进行选择操作。
Swing组件(javax.swing.-) 面板:JPanel 标签化窗格:JTabbedPane 拆分窗格:JSplitPane 滚动窗格:JScrollPane 工具栏:JToolBar 桌面窗格:JDesktopPane 内部框架:JInternalFrame 分层窗格:JLayeredPane ...
主要介绍了Java Swing JList列表框的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
JFC Swing活学活用系列之定制JList显示.rar
JList多选值的获取, 由JList组件实现的列表框有3种选取模式,设置方法为通过JList类的setSelectionMode(int selectionMode)方法,该方法的入口参数可以通过ListSelectionModel类中的静态常量设置。
JList 上下左右拖动,例子说明.上下左右拖动
自定义的JList,像android的ListView,可以点击按钮后马上删除当前条,并即时显示最新数据,有点数据驱动UI的感觉。Swing自定义控件必备。
主要介绍了Java Swing中的按钮(JButton)、组合框(JComboBox)、下拉列表(JList)和颜色选择器(JColorChooser)组件使用案例,需要的朋友可以参考下
关于java中jlist的一些用法,。。
使用JList 显示图片并动态改变显示的图片!
NULL 博文链接:https://jisonami.iteye.com/blog/2181450
构造函数中传递String数组给JList添加内容,同时给JList添加滚动条。
swing入门必看示例( oracle 官方swingset3示例) ...组件:JTable/JTree/JList 基本组件:ToggleButtons/JButton/JComboBox/ProgressBar/Slider/Spinner/TextFeild/JEditorPane 选择器:JColorChooser/JOptionPane
JLIst的使用,主要是介绍基础
JList事件监听器方法实现代码