简体   繁体   English

从两个不同的mysql数据填充jcombobox

[英]Populate jcombobox from two different mysql data

I created a jdialog with employee list table with two buttons, the add and details button. 我用员工列表表创建了一个jdialog,该表带有两个按钮,即添加和详细信息按钮。 The add button will show a blank employee details jdialog for adding new employee while the details button will fill the employee details jdialog based on the selected employee in the list table. “添加”按钮将显示一个空白的“雇员详细信息”对话框,用于添加新雇员,而“详细信息”按钮将根据列表中的选定雇员填充该雇员的详细信息对话框。 The problem is that when I click the details, the jcombobox for department does not show the corresponding data for the selected employee instead it still shows the department list. 问题是,当我单击详细信息时,部门的jcombobox不会显示所选雇员的相应数据,而是仍显示部门列表。 What I want is that the said jcombobox must show first the department from the selected employee before the department list. 我想要的是,所述jcombobox必须在部门列表之前首先显示所选雇员的部门。 How can I achieve that. 我该如何实现。 Here is the code for the jcombobox in question: 这是有问题的jcombobox的代码:

data = new ProcessDB();
        for(int i = 0; i < data.loadDeptCombo().get(0).size();i++){
            cmbDept.addItem(data.loadDeptCombo().get(1).get(i));
        }

public void loadInfo(String EmpID) throws ParseException{
    data = new ProcessDB();
    cmbDept.addItem(data.getEmpInfo(EmpID).get(4).get(0));
}

this is the processdb: 这是processdb:

public List<List<String>> loadDeptCombo(){
    sql = new String("SELECT * FROM departments ORDER BY Deptname ASC");
    List<List<String>> values =  new ArrayList<>();
    List<String> id = new ArrayList<>();
    List<String> dept = new ArrayList<>();

    try{
        stmt = data.createStatement();
        rs = stmt.executeQuery(sql);

        while(rs.next()){
            id.add(String.valueOf(rs.getInt("DeptID")));
            dept.add(rs.getString("Deptname"));
        }
    }catch(SQLException ex){
        ex.printStackTrace();
    }
    values.add(id);
    values.add(dept);

    return values;
}



 public List<List<String>> getEmpInfo(String EmpID){
    sql = new String("SELECT * FROM workinfo WHERE EmpID = ?");
    List<List<String>> values = new ArrayList<>();
    List<String> empID = new ArrayList<>();
    List<String> lastName = new ArrayList<>();
    List<String> firstName = new ArrayList<>();
    List<String> middleName = new ArrayList<>();
    List<String> department = new ArrayList<>();
    List<String> designation = new ArrayList<>();
    List<String> dateStarted = new ArrayList<>();
    List<String> rate = new ArrayList<>();
    List<String> section = new ArrayList<>();
    List<String> line = new ArrayList<>();
    List<String> admin = new ArrayList<>();

    try{
        pstmt = data.prepareStatement(sql);
        pstmt.setString(1, EmpID);
        rs = pstmt.executeQuery();

        while(rs.next()){
            empID.add(rs.getString("EmpID"));
            lastName.add(rs.getString("Lastname"));
            firstName.add(rs.getString("Firstname"));
            middleName.add(rs.getString("Middlename"));
            department.add(rs.getString("Department"));
            designation.add(rs.getString("Designation"));
            dateStarted.add(String.valueOf(rs.getDate("DateStarted")));
            rate.add(rs.getString("Rate"));
            section.add(rs.getString("Section"));
            line.add(rs.getString("Line"));
            admin.add(rs.getString("Admin"));
        }
    }catch(SQLException ex){
        ex.printStackTrace();
    }
    values.add(empID);
    values.add(lastName);
    values.add(firstName);
    values.add(middleName);
    values.add(department);
    values.add(designation);
    values.add(dateStarted);
    values.add(rate);
    values.add(section);
    values.add(line);
    values.add(admin);

    return values;
}

I found my solution by arranging the code like this: 我通过安排如下代码找到了解决方案:

if(EmpID != ""){
        try {
            data = new ProcessDB();
            loadInfo(EmpID);
            cmbDept.addItem(data.getEmpInfo(EmpID).get(4).get(0));
            cmbRate.addItem(data.getEmpInfo(EmpID).get(7).get(0));

            for(int i = 0; i < data.loadDeptCombo().get(0).size();i++){
                cmbDept.addItem(data.loadDeptCombo().get(1).get(i));
            }

            for(int i = 0;i < data.loadRateCombo().get(0).size();i++){
                cmbRate.addItem(data.loadRateCombo().get(1).get(i));
            }
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }else{
        try{
            data = new ProcessDB();
            for(int i = 0; i < data.loadDeptCombo().get(0).size();i++){
                cmbDept.addItem(data.loadDeptCombo().get(1).get(i));
            }

            for(int i = 0;i < data.loadRateCombo().get(0).size();i++){
                cmbRate.addItem(data.loadRateCombo().get(1).get(i));
            }

        }catch(Exception ex){
            //ex.printStackTrace();
            System.out.println(ex.getMessage());
        }

    }

first reload the data from the table if the string EmpID is not empty followed by loading the default department list and if empty, reload only the default department list in the combobox. 如果字符串EmpID不为空,则首先从表中重新加载数据,然后加载默认的部门列表,如果为空,则仅在组合框中重新加载默认的部门列表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM