如何将我的JTable连接中单击的行显示给我的MS访问数据Base到JTextFields

时间:2015-05-09 06:14:48

标签: java swing ms-access

我有程序,我向我的JTable显示MS Access数据库的行和列,如果从该JTable单击一个单元格,所有数据将显示给它各自的JTextField。这是我的代码。

    public void reloadData() throws ClassNotFoundException, SQLException 
    {        

            columnNames.clear();
            data.clear();

            String DBPAD = "sourceFolder/employeeTable1.mdb";
            String DB = "jdbc:ucanaccess://" + DBPAD;   

            con1x = DriverManager.getConnection(DB);
            st1x = con1x.createStatement();
            rs1x = st1x.executeQuery("Select * FROM employeeTable1");
            ResultSetMetaData rsmd = rs1x.getMetaData();
            int column = rsmd.getColumnCount();                 

            columnNames.addElement("Employee Name");              
            columnNames.addElement("Employee Address");            
            columnNames.addElement("Employee Marital Status");
            columnNames.addElement("Employee Date of Membership");
            columnNames.addElement("Employee Blood Type");
            columnNames.addElement("Employment Status");                
            columnNames.addElement("Employee Gender");
            columnNames.addElement("Employee Date Of Birth");
            columnNames.addElement("Employee Age");
            columnNames.addElement("Beginning Capital");
            columnNames.addElement("Gross Salary");
            columnNames.addElement("Salary Deductions");
            columnNames.addElement("Net Salary");

            while(rs1x.next()) 
            {
                Vector<Object> row = new Vector<Object>(column);
                for(int i=1; i<=column; i++) 
                {                   
                     row.addElement(rs1x.getObject(i));
                }
                data.addElement(row);               
            }   


            try
            {
                mainTableJTableCoop.getSelectionModel().addListSelectionListener(new ListSelectionListener()
                {
                   public void valueChanged(ListSelectionEvent event) 
                   {    
                      String employeeName = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 0).toString());
                      endrollNameFields.setText(employeeName);                  

                      String employeeAddress = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 1).toString());
                      endrollAddressFields.setText(employeeAddress);

                      String employeeMaritalSatatus = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 2).toString());
                      maritalstatusFields.setText(employeeMaritalSatatus);

                      String employeeDateOfMembership = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 3).toString());
                      dateOfMembershipFields.setText(employeeDateOfMembership);

                      String employeeBloodType = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 4).toString());
                      bloodTypeFields.setText(employeeBloodType);

                      String employeeEmploymentStatus = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 5).toString());
                      endrollEmployeestatusFields.setText(employeeEmploymentStatus);

                      String employeeGender = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 6).toString());
                      genderFields.setText(employeeGender);

                      String dateOfBirth = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 7).toString());
                      birthDateFields.setText(dateOfBirth); 

                      String employeeAge = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 8).toString());
                      ageFields.setText(employeeAge);   

                      String beginningCapital = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 9).toString());
                      beginningCapitalFields.setText(beginningCapital);

                      String grossSalary = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 10).toString());
                      grossSalaryFields.setText(grossSalary);

                      String deductions = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 11).toString());
                      salaryDeductionFields.setText(deductions);

                      String netSalary = (mainTableJTableCoop.getValueAt(mainTableJTableCoop.getSelectedRow(), 12).toString());
                      netSalaryFields.setText(netSalary);                
                   }
                });              
            }
            catch(Exception e)
            {
                JOptionPane.showMessageDialog(null, e);
            }


    }

我的代码看起来不错,但每次我从连接到MS访问数据库的JTable中单击一行时,我的JTextFields中显示的信息始终是来自第一行的数据,即使我单击第二行,第三行。有什么建议可以实现我想要的输出吗?

2 个答案:

答案 0 :(得分:0)

如果没有可运行的示例很难100%确定,我首先想到的是,当调用ListSelectionListener时,您不应该向JTable添加另一个reloadData。这会在每次调用此方法时添加一个ANOTHER监听器,这可能会产生一些有趣的副作用,并可能使您的程序降级。

同样,ListSelectionListener可能会在选择更改时通知两次,一次取消选择(当前选择的内容)和新选择发生时一次。

您应该检查getValueIsAdjusting的{​​{1}}的状态,以确定是否可以传递另一个事件

ListSelectionEvent

有关详细信息,请参阅How to Write a List Selection Listener

考虑提供展示您问题的runnable example。这不是代码转储,而是您正在做的事情的一个示例,它突出了您遇到的问题。这将减少混淆和更好的响应

答案 1 :(得分:0)

现在我想说尝试使用print语句来查看每次事件处理程序收到事件时这个“mainTableJTableCoop.getSelectedRow()”返回的值,这可以让你开始找出问题来自哪里