Java Swing 在JTable里增加动态数据的下拉框
2011-01-07 11:31
155 查看
http://www.gbsou.com/2011/01/07/3400.htmlJava Swing 在JTable里增加动态数据的下拉框
首
先我得申明下。这个在jtable中增加下拉框的代码源自于网文,但是他增加的数据是写死的,并不使用于动态的生成,网上也基本上没这个技巧的介
绍。经过2天的努力我终于做出来了,在此分享下,本文随便转载,Java本来就是开源的,不喜欢网上那种不让转载还唧唧歪歪的,但是请尊重我的劳动成果。
在转载本文时保留我的连接:http://www.ij2ee.com/2011/01/07/java-swing-在jtable里增加动态数据的下拉框.html
下面代码是我在网络上的代码上的修改。我会给出思路,修改只是把拥有一个一个字符串数组构造函数改写成了使用Vector,处于对字符串数组不易于自动增加大小,设置小了会造成数组越界异常,设置太大,倒是jtable上会出现大量的空白行。
——————————————————–
首先我们要继承JComboBox和DefaultCellEditor
代码
1
class
MyComboBoxEditor
extends
DefaultCellEditor {
2
public
MyComboBoxEditor(Vector
<
String
>
items) {
3
super
(
new
MyCombox(items));
4
}
5
}
6
7
class
MyCombox
extends
JComboBox{
8
public
MyCombox(Vector
<?>
items) {
9
super
(items);
10
}
11
12
}
改写他们的目的是为了能给jtable的单元格增加下拉框。 其实没有MyCombox,的必要,直接new JCombox 就可以了 但是我的想法是改写jcombox 这里就不列出我的部分代码了。而且那也不是本文的重点。
————————————————-
第二 当上面的DefaultCellEditor 被改写好后 我们就可以把他赋给jtable的一个单元格了,这里为了后面的方便 我们讲继承jtable。
代码
1
class
MyTable
extends
JTable{
2
3
4
public
MyTable() {
5
super
();
6
//
TODO Auto-generated constructor stub
7
}
8
int
myRow
=-
1
,myCol
=-
1
;
9
TableCellEditor myEditor;
10
public
void
setComboCell(
int
r,
int
c,TableCellEditor ce){
11
this
.myRow
=
r;
12
this
.myCol
=
c;
13
//
这里将引用我们前面定义的cellEditor
14
this
.myEditor
=
ce;
15
16
}
17
18
@Override
19
public
TableCellEditor getCellEditor(
int
row,
int
column) {
20
if
(row
==
myRow
&&
column
==
myCol
&&
myEditor
!=
null
)
21
return
myEditor;
22
return
super
.getCellEditor(row, column);
23
}
24
25
}
———————————————–
第三 当上面的准备都做好时 就方便了。下面我们该准备数据了。
这里所要提到的是 我们的替换数据将存放在一个
private
Map
<
String, Vector
<
String
>>
insteadMap
=
new
HashMap
<
String, Vector
<
String
>>
();
里。
这里的map的 Vector<String> 就是我们要替换下拉的数据。 key是查询条件。
比如我们有数据
A –> a1,a2,a3,a4,a5
B –> b1,b2,b3,b4
在table的初始化中的单元格数据将显示A,当点击A的时候将会去上面的insteadMap中寻找替代数据Vector,并引用第二步中的方法去替换当前单元格
————————————————–
第四步 最终调用方法
代码
Vector
<
String
>
s
=
insteadMap.get(vl
+
""
);
//
这里的vl就相当于第三步中的 A B
if
(s
==
null
||
s.isEmpty()){
return
;
}
//
下面的方法三个参数是(要替换成下拉框单元格的行,列,及我们的Editor)
dataTable.setComboCell(t.getSelectedRow(),
2
,
new
MyComboBoxEditor(insteadMap.get(vl.toString())));
这里要注意的是 dataTable是用的我们第二步中自定义的JTable
private
MyTable dataTable
=
dataTable
=
new
MyTable();
好了本文完成。好累啊。记得转载保留本文住处:http://www.ij2ee.com/2011/01/07/java-swing-在jtable里增加动态数据的下拉框.html
固定链接: Java Swing 在JTable里增加动态数据的下拉框 | 爱J2EE
+复制链接
首
先我得申明下。这个在jtable中增加下拉框的代码源自于网文,但是他增加的数据是写死的,并不使用于动态的生成,网上也基本上没这个技巧的介
绍。经过2天的努力我终于做出来了,在此分享下,本文随便转载,Java本来就是开源的,不喜欢网上那种不让转载还唧唧歪歪的,但是请尊重我的劳动成果。
在转载本文时保留我的连接:http://www.ij2ee.com/2011/01/07/java-swing-在jtable里增加动态数据的下拉框.html
下面代码是我在网络上的代码上的修改。我会给出思路,修改只是把拥有一个一个字符串数组构造函数改写成了使用Vector,处于对字符串数组不易于自动增加大小,设置小了会造成数组越界异常,设置太大,倒是jtable上会出现大量的空白行。
——————————————————–
首先我们要继承JComboBox和DefaultCellEditor
代码
1
class
MyComboBoxEditor
extends
DefaultCellEditor {
2
public
MyComboBoxEditor(Vector
<
String
>
items) {
3
super
(
new
MyCombox(items));
4
}
5
}
6
7
class
MyCombox
extends
JComboBox{
8
public
MyCombox(Vector
<?>
items) {
9
super
(items);
10
}
11
12
}
改写他们的目的是为了能给jtable的单元格增加下拉框。 其实没有MyCombox,的必要,直接new JCombox 就可以了 但是我的想法是改写jcombox 这里就不列出我的部分代码了。而且那也不是本文的重点。
————————————————-
第二 当上面的DefaultCellEditor 被改写好后 我们就可以把他赋给jtable的一个单元格了,这里为了后面的方便 我们讲继承jtable。
代码
1
class
MyTable
extends
JTable{
2
3
4
public
MyTable() {
5
super
();
6
//
TODO Auto-generated constructor stub
7
}
8
int
myRow
=-
1
,myCol
=-
1
;
9
TableCellEditor myEditor;
10
public
void
setComboCell(
int
r,
int
c,TableCellEditor ce){
11
this
.myRow
=
r;
12
this
.myCol
=
c;
13
//
这里将引用我们前面定义的cellEditor
14
this
.myEditor
=
ce;
15
16
}
17
18
@Override
19
public
TableCellEditor getCellEditor(
int
row,
int
column) {
20
if
(row
==
myRow
&&
column
==
myCol
&&
myEditor
!=
null
)
21
return
myEditor;
22
return
super
.getCellEditor(row, column);
23
}
24
25
}
———————————————–
第三 当上面的准备都做好时 就方便了。下面我们该准备数据了。
这里所要提到的是 我们的替换数据将存放在一个
private
Map
<
String, Vector
<
String
>>
insteadMap
=
new
HashMap
<
String, Vector
<
String
>>
();
里。
这里的map的 Vector<String> 就是我们要替换下拉的数据。 key是查询条件。
比如我们有数据
A –> a1,a2,a3,a4,a5
B –> b1,b2,b3,b4
在table的初始化中的单元格数据将显示A,当点击A的时候将会去上面的insteadMap中寻找替代数据Vector,并引用第二步中的方法去替换当前单元格
————————————————–
第四步 最终调用方法
代码
Vector
<
String
>
s
=
insteadMap.get(vl
+
""
);
//
这里的vl就相当于第三步中的 A B
if
(s
==
null
||
s.isEmpty()){
return
;
}
//
下面的方法三个参数是(要替换成下拉框单元格的行,列,及我们的Editor)
dataTable.setComboCell(t.getSelectedRow(),
2
,
new
MyComboBoxEditor(insteadMap.get(vl.toString())));
这里要注意的是 dataTable是用的我们第二步中自定义的JTable
private
MyTable dataTable
=
dataTable
=
new
MyTable();
好了本文完成。好累啊。记得转载保留本文住处:http://www.ij2ee.com/2011/01/07/java-swing-在jtable里增加动态数据的下拉框.html
固定链接: Java Swing 在JTable里增加动态数据的下拉框 | 爱J2EE
+复制链接
相关文章推荐
- java JTable中动态添加、增加一行数据
- 《物联网框架ServerSuperIO教程》- 23.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率
- 从数据库动态添加数据到下拉框(select)中
- 动态加载表格数据,自动增加tr td
- JTable动态刷新数据
- pyqt 动态增加 下拉框 标签 显示不全
- swing中jTable的数据动态添加效果
- 动态增加PHP类的数据成员
- Vue.js学习系列(十)---给页面增加动态数据
- 动态增加hadoop数据节点(继上片文档)
- html对select标签实现数据动态增加,删除,修改功能。
- 下拉框动态获取数据库值:树形结构写法
- jquery在html中动态增加数据到table中
- (C#)WPF类似下拉框的自动完成源,数据是从数据库查询得出动态数据
- Adobe LiveCycle Designer ES4 表格绑定数据动态增加行
- JTable动态刷新数据
- 常用的js动态增加(删除)table数据行的功能
- 使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据
- jqgrid 的一些操作 动态增加列 用本地 数据 修改表格
- MySQL Cluster (五) --- 动态增加数据节点配置步骤