您的位置:首页 > 编程语言 > Java开发

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
+复制链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: