1、从数据库里读出数据,使用的是SLECT,然后将其存入结果集中。然后将结果集存到模型中,使用时再取出。这里的模型的变量必须和列名相对应,从数据库中读取出的是将整列的值依次添加到对应的变量中,要下拉框选择操作时,需要的某一行的数据,这时就需要每读取一行,就要进行下拉框的添加操作,如
private void updateSupperlierCombox(ResultSet set) {
try {
while (set.next()) {
Supperlier spinfo = new Supperlier();//
spinfo.setId(set.getString("Supplier_ID").trim());
spinfo.setName(set.getString("Supplier_Name").trim());
spinfo.setLinkman(set.getString("Linkman").trim());
spinfo.setAd(set.getString("Supplier_address").trim());
spinfo.setTel(set.getString("Telephone").trim());
spinfo.setMail(set.getString("Email").trim());
spinfo.setYe(set.getString("Supplier_salesman").trim());
spinfo.setJibie(set.getString("Supplier_Type").trim());
spinfo.setBeizhu(set.getString("Supplier_remarks").trim());
/* DefaultComboBoxModel model = (DefaultComboBoxModel) SupperlierCombox.getModel();
if (model.getIndexOf(spinfo) < 0) // 返回指定对象在列表中的索引位置。不重复的商品名会被添加进去
*/
SupperlierCombox.addItem(spinfo); // 则添加选项
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
这里SupperlierCombox.addItem()方法会自动调用toString,所以模型中要重写toString方法,将需要添加到下拉框的那一个变量作为其返回值,比如讲name作为下拉框,则重写实例如下
public String toString() {
return getName();
}
这样就可以实现,每遍历一行,就会将其名字添加到下拉框中。
2、这里需要点击下拉框时就要进行下拉框的更新,即可添加响应如下
SupperlierCombox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ResultSet set = LoginPanel.findForResultSet("select * from Supplier");//根据供应商显示不同的商品下拉框
SupperlierCombox.removeAllItems();
updateSupperlierCombox(set);
}
});
3、要实现根据下拉框的选择,表格上显示对应的数据,这时就需要根据下拉框的选项变更,更新表格
首先需要添加下拉选项的响应,addItemListener,如下:
SupperlierCombox.addItemListener(new ItemListener() {
<span style="white-space:pre"> </span>public void itemStateChanged(ItemEvent e) {
<span style="white-space:pre"> </span>Supperlier info = (Supperlier) SupperlierCombox.getSelectedItem();
<span style="white-space:pre"> </span>// 如果选择有效就更新表格
<span style="white-space:pre"> </span>if (info != null && info.getName() != null) {
<span style="white-space:pre"> </span>updateTable();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>});
根据下拉框更新表格的代码如下:
private synchronized void updateTable() {
Supperlier spinfo = (Supperlier) SupperlierCombox.getSelectedItem();//选中的商品名称
// System.out.println(spinfo+"122");
int row = table.getSelectedRow();
if (row >= 0 && spinfo != null) {
table.setValueAt(spinfo.getId(), row, 0);
table.setValueAt(spinfo.getLinkman(), row, 2);
table.setValueAt(spinfo.getAd(), row, 3);
table.setValueAt(spinfo.getTel(), row, 4);
table.setValueAt(spinfo.getMail(), row, 5);
table.setValueAt(spinfo.getYe(), row, 6);
table.setValueAt(spinfo.getJibie(), row, 7);
table.setValueAt(spinfo.getBeizhu(), row, 8);
}
}
此处
Supperlier spinfo = (Supperlier) SupperlierCombox.getSelectedItem();//选中的商品名称
不是很理解,但是知道是将下拉选项名称实例化,后面的值的设定可以调用模型相应的值(这是讲具体对象转化为相应类对象的通用方法)