我想根据表行的选择用数据库中的值填充组合框,它可以工作,但只有当我选择行的不同单元格时才选择所需的组合框单元格。但是,如果我选择另一行的组合框单元格,它会显示之前的项目,选择其中一项后,如果我再次单击组合框,它将填充新值。我希望在单击行或甚至组合框单元格时填充新值。请帮忙。 代码如下: -
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;
}
答案 0 :(得分:1)
它可以工作,但只有当我选择行的不同单元格时,才选择所需的组合框单元格
使用组合框作为编辑器单击单元格时,将在更新所选行之前调用编辑器。所以这是一个时间问题。
一种解决方案是覆盖getCellEditor(...)
的{{1}}方法,以便在实际调用编辑器时加载数据。此时,所选行将更新,您可以获取相应行的数据。
此问题在此问题中得到了证明:https://stackoverflow.com/a/4211552/131872
请注意,您可能需要考虑缓存数据,这样每次编辑单元格时都不会进行SQL访问。