- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个程序,可以将 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
可能会收到两次有关选择更改的通知,一次是在取消选择选择(当前选择的内容)时,一次是在发生新选择时。
您应该检查 ListSelectionEvent
的 getValueIsAdjusting
的状态,以确定是否可以传递另一个事件
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/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!