根据java中表行的选择,用不同的值填充表格单元格的组合框

时间:2016-07-09 10:29:57

标签: java swing combobox

我想根据表行的选择用数据库中的值填充组合框,它可以工作,但只有当我选择行的不同单元格时才选择所需的组合框单元格。但是,如果我选择另一行的组合框单元格,它会显示之前的项目,选择其中一项后,如果我再次单击组合框,它将填充新值。我希望在单击行或甚至组合框单元格时填充新值。请帮忙。 代码如下: -

String columnName[] = { "Date","Voucher ID","Voucher No","Amount","VOUCHER_NARRATION","Exp. Head" };
String dataValues[][] = {};
voucherTable=new JTable(dataValues,columnName);
voucherTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel list=voucherTable.getSelectionModel();
voucherTable.setSelectionModel(list);
list.addListSelectionListener(new ListSelectionListener(){
    public void valueChanged(ListSelectionEvent lt) {
        try {
            voucherid=voucherTable.getValueAt(voucherTable.getSelectedRow(),1).toString();
            System.out.println(voucherid);
            comboBox.removeAllItems();
            TableColumn road=voucherTable.getColumnModel().getColumn(5);
            voucherTable.getColumnModel().getColumn(5).setCellEditor(new DefaultCellEditor(new VoucherUpdate().getExpHead(voucherid)));
        } catch(Exception h) { 
            System.err.println(h); 
            return;
        }
    }
});

public JComboBox getExpHead(String vid) {
    String voucherId=vid;
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection conn=DriverManager.getConnection("jdbc:odbc:SARALIFMS","SARALIFMS","O391120SUMAN");
        Statement st=conn.createStatement();
        ResultSet rs=st.executeQuery("SELECT E.EXP_ID,EXP_HEAD FROM TD_VOUCHER_SUMAN D, MM_PRIA_EXPENDITURE E"
        +" WHERE VOUCHER_ID='"+voucherId+"' AND D.ACCOUNT_CODE=E.ACCOUNT_CODE");
        while(rs.next()) {
            String expHead=rs.getString("EXP_HEAD");
            comboBox.addItem(expHead);
        } 
        conn.close();
    } catch(Exception e) {
        System.out.println(e);
    }
    return comboBox;
}

1 个答案:

答案 0 :(得分:1)

  

它可以工作,但只有当我选择行的不同单元格时,才选择所需的组合框单元格

使用组合框作为编辑器单击单元格时,将在更新所选行之前调用编辑器。所以这是一个时间问题。

一种解决方案是覆盖getCellEditor(...)的{​​{1}}方法,以便在实际调用编辑器时加载数据。此时,所选行将更新,您可以获取相应行的数据。

此问题在此问题中得到了证明:https://stackoverflow.com/a/4211552/131872

请注意,您可能需要考虑缓存数据,这样每次编辑单元格时都不会进行SQL访问。