gpt4 book ai didi

java - 如何显示从 JTable 连接到 MS Access 数据库到文本字段的单击行

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:48 25 4
gpt4 key购买 nike

我有一个程序,可以将 MS Access 数据库的行和列显示到我的 JTable 中,如果单击该 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 Access 数据库的 JTable 中的一行时,我的 JTextFields 中显示的信息始终是第一行的数据,即使我单击第二行、第三行也是如此。有什么建议可以实现我想要的输出吗?

最佳答案

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

此外,ListSelectionListener 可能会收到两次有关选择更改的通知,一次是在取消选择选择(当前选择的内容)时,一次是在发生新选择时。

您应该检查 ListSelectionEventgetValueIsAdjusting 的状态,以确定是否可以传递另一个事件

public void valueChanged(ListSelectionEvent event) 
{
if (!event.getValueIsAdjusting()) {
int selectedRow = mainTableJTableCoop.getSelectedRow();

参见How to Write a List Selection Listener了解更多详情。

考虑提供runnable example这说明了你的问题。这不是代码转储,而是您正在执行的操作的示例,它突出显示了您遇到的问题。这将减少困惑并获得更好的响应

关于java - 如何显示从 JTable 连接到 MS Access 数据库到文本字段的单击行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30136699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com