我有程序,我向我的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中显示的信息始终是来自第一行的数据,即使我单击第二行,第三行。有什么建议可以实现我想要的输出吗?
答案 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()”返回的值,这可以让你开始找出问题来自哪里