如何从组合框中检索隐藏字段?

时间:2016-09-30 18:11:45

标签: java swing combobox

我有一个用户表(tbl_users)和一个用户角色表(tbl_list_user_roles)。在tbl_users中,我为分配给用户的角色存储了一个ID(Role_ID)。在tbl_list_user_roles中,我有几个角色来填充组合框(后面的代码片段):

st = conn.createStatement();
String QueryString3 = "SELECT ID, RoleName FROM tbl_list_user_roles WHERE Active = true ORDER BY RoleRank DESC";
ResultSet rs3 = st.executeQuery(QueryString3);
while (rs3.next()) {
    cbo_Role.addItem(new TypeEntry_Role(rs3.getInt(1), rs3.getString(2)));          
}
rs3.close();

查询结果看起来像这样(抱歉,不能让列整齐排列):

ID     RoleRank   RoleName   Active  
7       100       None       true  
1        99       Viewer     true  
4        30       Reviewer   true  
3        20       Assigner   true  
2        10       Analyst    true  
5       -50       Admin      true  
6       -99       Developer  true  

以下是相关课程:

class TypeEntry_Role {
    private int value;
    private String label;

    public TypeEntry_Role(int ID, String RoleName) {
        this.value = ID;
        this.label = RoleName;
    }
    public int getValue() {
        return value;
    }
    public String toString() {
        return label;
    }
}

这里是我尝试用于在组合框中为tbl_Users(selectedRow的第二列)中的Role_ID设置所选行的代码:

cbo_Role.setSelectedIndex((int) table_Users.getValueAt(selectedRow, 2) -1 );

问题是.getValueAt从tbl_users返回 Role_ID 。我需要的setSelectedIndex是Role_ID的索引。例如,如果Role_ID是4(Reviewer),我需要将SelectedIndex设置为2.显示的代码将SelectedIndex设置为4,显示" Analyst"。

所以,我认为我需要一种方法来获取selectedRow的索引而不是ValueAt。我想我可以遍历组合框的内容并找到具有与ID(隐藏)列匹配的Role_ID的条目,然后使用该索引。但是,我不知道如何访问组合框的 ID (值)。我尝试这样做会返回 RoleName (标签)。

也许有更直接的方法。如果是这样,那将是有利的。

我是来自MS-Access的相对较新的Java。非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

你会遍历组合框中的条目,并且(这是我认为你缺少的:)在它们上面调用getValue()来获取id值(假设id是保持在此字段中),然后突出显示包含正确id值的单元格。

你的答案"表明您在JComboBox上调用了getValue(),这些内容确实没有意义。另一方面,你的TypeEntry_Role 一个getValue()方法,这当然是你应该使用的方法!例如:

for (int i = 0; i < cbo_Role.getItemCount(); i++) {
    System.out.println(i + " item: " + cbo_Role.getItemAt(i).getValue());
}