Java Swing 在JTable里增加动态数据的下拉框

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

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值