尝试从"JTable"获取值并将其设置为 "Jtextfield"



我在这里看到了一些和我一样的问题,但并不是所有的问题都包括我的问题。。我想从"JTable"中获取值,并将其设置为"Jtextfield"。我写了代码,但它不起作用。这是我的代码:

private void Table_EmployeeMouseClicked(java.awt.event.MouseEvent evt)
{                                            
        int row =Table_Employee.getSelectedRow();
        String Table_click=(Table_Employee.getModel().getValueAt(row, 0).toString());
        try{
        String sql ="select * from KYaziciProg where "Müşteri Adı"='"+Table_click+"' ";
        pst=conn.prepareStatement(sql);
        rs=pst.executeQuery();
        if(rs.next()){
        String add1 =rs.getString("Yapılan İşlem");
        jTextField2.setText(add1);
        String add2 =rs.getString("Müşteri Adı");
        jTextField1.setText(add2);
        String add3 =rs.getString("Ürünün Cinsi");
        jTextField3.setText(add3);
        String add4 =rs.getString("Ürünün Miktarı");
        jTextField4.setText(add4);
        String add5 =rs.getString("Ürünün Fiyatı");
        jTextField5.setText(add5);
        String add6 =rs.getString("Ürünün Tutarı");
        jTextField6.setText(add6);
        String add7 =rs.getString("İşlem Tarihi");
        jTextField7.setText(add7);
        String add8 =rs.getString("Ödeme Vadesi");
        jTextField8.setText(add8);
        String add9 =rs.getString("Yapılan Ödeme");
        jTextField9.setText(add9);
        String add10 =rs.getString("Kalan Bakiye");
        jTextField10.setText(add10);
        }
       }catch(Exception e){
       JOptionPane.showMessageDialog(null, e);
       } 
    }                                           
  1. pst.close();rs.close();添加到finally块(try - catch - finally),否则这些对象将增加JVM内存

  2. 尽量避免在此作业中使用MouseListener,即private void Table_EmployeeMouseClicked(java.awt.event.MouseEvent evt)

  3. 每次单击鼠标都可以调用JDBC,但不能保证

    • 任何一行都被选中,因为MouseEvents在默认情况下不仅选择JTable 中的单元格、行或列

    • 只选择一个单元格、行或列,否则您将需要求解选定单元格、行、列的数组

    • 添加了ListSelectionListener

    • 将ListSelectionMode更改为SINGLE

编辑

  • 对此作业使用JPopup中的操作,从JPopup而不是从Mouse或ListSelectionListener调用JDBC,然后您可以在JTable中使用所有鼠标a键事件,而不必关心JDBC是否调用

  • 然后我错过了那里的测试(否则是ArraysOf或NPE异常)伪代码

   int row =Table_Employee.getSelectedRow();
   if (row > -1) {  // no selection
     // now is possible to determine value
     // note see my next point about following code line
     // Table_Employee.getModel().getValueAt(row, 0).toString() 
   }

  • JTables视图可以排序或筛选,列可以重新排序,从视图中删除,然后从所选单元格、行、列中进行索引。这不等于在底层XxxTableModel中进行索引,需要将视图索引转换为模型索引。请参阅Oracle教程中关于convertXxxToXxx的说明,并注意:使用排序器时,请始终记住转换单元格坐标。

  • 也许,默认情况下不需要,JTables视图可以返回相同的值,直到这个值在TableCellRenderer 中没有被修改为止

  • 删除多余的代码行(在数据库中不允许为null的情况下,否则必须测试if(rs.getString("Yapılan İşlem"))!= null)

String add1 = rs.getString("Yapılan İşlem");
jTextField2.setText(add1);
could be with success
jTextField2.setText((rs.getString("Yapılan İşlem")).trim());