今天正在做系统的用户模块,其中一项是swing中 combobox控件需要从数据库中获取其整体的集合,然后将集合遍历后将其中的对象放入到combo box中,在界面展现上显示其名称,而在数据传递及写入数据时则为其ID值。当时查询各种关于combo box的资料及API,总是找不到解决的办法。在费了半天时间,才在论坛里找到,swing中的combo box 竟然不支持对象,我瞬间斯巴达了~~~于是就在想怎么解决,经过对frame的代码仔细研究后发现,在new frame时会调用其构造函数,其中构造函数中调用了一个initComponents()的方法,在这个方法里面我发现了combo box里在setModel里面new了一个String[]数组,为此我就想到了是否我把对象进行拆分,分别放入到2个不同的数组中,将要在下拉菜单中显示的内容放入一个string数组中,然后将id值放入到int数组中,然后这2个数据的添加是同步的,这样我再获得其combo box的我所选择的项的索引(PS:combo box的索引值排序方法和数组的游标指针的方式一样)来直接获取id所在的int数组中的值,这样就解决了这个问题!
以下附上代码:
1、在打开frame窗口时需要将从数据库中获取的集合放入到数组中:
private void getCombobox() {
List<UserFamily> ufs =ua.getUserFamily();
boxmodelk = new int[ufs.size()];
boxmodels = new String[ufs.size()];
for (int i = 0; i < ufs.size(); i++) {
UserFamily uf = new UserFamily();
uf = ufs.get(i);
boxmodelk[i] = uf.getFamilyid();
boxmodels[i] = uf.getFamilyname();
}
2、在initComponents()方法中修改其setModel()方法:
userfamily.setModel(new javax.swing.DefaultComboBoxModel(boxmodels));
3、实现从combo box中获取想要的值:
int userfamily = this.userfamily.getSelectedIndex();
user.setUserfamily(boxmodelk[userfamily]);
这样就可以直接得到真实的ID值,就是在后期维护combo box的选项表时,也不会出错~