java - java 中的 mouseclicked 事件无法填充文本字段

标签 java swing

我正在用 netbeans 制作一个 GUI。我右键单击 JTable 来添加鼠标单击事件监听器。我将代码添加到新方法中。在我的一生中,当我单击 JTable 时,我没有收到任何错误。 关于我做错了什么或如何解决它有什么想法吗?如果您需要查看更多我的代码,请告诉我。除了与数据库的连接之外的所有内容都在驱动程序类之外运行。

我将程序移至 Eclipse,以便更轻松地排除故障。

    private void tableDisplayMouseClicked(java.awt.event.MouseEvent evt) {                                          

   try {
       int row = tableDisplay.getSelectedRow();
       String tableClick = (tableDisplay.getModel().getValueAt(row, 1).toString());
       String sql = " select * from contact where id = ' " + tableClick + " ' ";
       pst = conn.prepareStatement(sql);
   rs = pst.executeQuery();
       if(rs.next()) {
            System.out.println("hey dude this method is being called.");   
           String add2 = rs.getString("Business_Name");
           fieldBN.setText(add2);   
           String add3 = rs.getString("First_Name");
           fieldFN.setText(add3);   
           String add4 = rs.getString("Last_Name");
           fieldLN.setText(add4);   
           String add5 = rs.getString("Phone");
           fieldP.setText(add5);   
           String add6 = rs.getString("Email");
           fieldE.setText(add6);   
           String add7 = rs.getString("Address_Line_1");
           fieldA.setText(add7);   
           String add8 = rs.getString("Address_Line_2");
           aLine2.setText(add8);   
           String add9 = rs.getString("Website");
           fieldW.setText(add9);                     
       }
   }
  catch(Exception e) {
      JOptionPane.showMessageDialog(null, e);
  }
}    

这是onclick方法

这是我的均匀听众

public Driver() {       
    gui();      
    conn = DbConnect.ConnectDb();
    UpdateTable();

       tableDisplay.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tableDisplayMouseClicked(evt);
            }
        });
}

这是整个驱动程序类:

import java.awt.BorderLayout;

public class Driver {

    private JFrame f;

    private JPanel p;

    private JTextField fieldBN;
    private JTextField fieldFN;
    private JTextField fieldLN;
    private JTextField fieldP;
    private JTextField fieldE;
    private JTextField fieldA;
    private JTextField aLine2;
    private JTextField fieldW;

    private JLabel labelBN;
    private JLabel labelFN;
    private JLabel labelLN;
    private JLabel labelP;
    private JLabel labelE;
    private JLabel labelA;
    private JLabel labelW;

    private JComboBox relationship;

    private JButton buttonS;

    private JTable tableDisplay;

    String[] relationshipValues = { "Business", "Friend", "Family", "Professional" };

    Connection conn = null;
    ResultSet rs = null;
    PreparedStatement pst = null;

    // Constructor:

    public Driver() {       
        gui();      
        conn = DbConnect.ConnectDb();
        UpdateTable();

           tableDisplay.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseClicked(java.awt.event.MouseEvent evt) {
                    tableDisplayMouseClicked(evt);
                }
            });
    }

    public void gui() { 
        f = new JFrame("Contact Book");


        GridBagConstraints c = new GridBagConstraints();  

        p = new JPanel(new GridBagLayout());
        f.getContentPane().add(p, BorderLayout.NORTH);

    c.gridx = 0;
    c.gridy = 0;
    labelBN = new JLabel ("Business Name:");
    p.add(labelBN, c);  

    c.gridx = 1;
    c.gridy = 0;
    fieldBN = new JTextField(10);
    p.add(fieldBN, c);

    c.gridx = 0;
    c.gridy = 1;
    labelFN= new JLabel ("First Name:");
    p.add(labelFN, c);      

    c.gridx = 1;
    c.gridy = 1;
    fieldFN = new JTextField (10);
    p.add(fieldFN, c);

    c.gridx = 0;
    c.gridy = 2;
    labelLN= new JLabel ("Last Name:");
    p.add(labelLN, c);      

    c.gridx = 1;
    c.gridy = 2;
    fieldLN = new JTextField (10);
    p.add(fieldLN, c);

    c.gridx = 0;
    c.gridy = 3;
    labelP = new JLabel ("Phone Number:");
    p.add(labelP, c);

    c.gridx = 1;
    c.gridy = 3;
    fieldP = new JTextField (10);
    p.add(fieldP, c);

    c.gridx = 0;
    c.gridy = 4;
    labelE = new JLabel ("Email:");
    p.add(labelE, c);

    c.gridx = 1;
    c.gridy = 4;
    fieldE = new JTextField (10);
    p.add(fieldE, c);

    c.gridx = 0;
    c.gridy = 5;                            
    labelA = new JLabel ("Address:");
    p.add(labelA, c);

    c.gridx = 1;
    c.gridy = 5;
    fieldA = new JTextField (10);
    p.add(fieldA, c);
    c.gridx = 1;
    c.gridy = 6;
    aLine2 = new JTextField (10);
    p.add(aLine2, c);

    c.gridx = 0;
    c.gridy = 7;
    labelW = new JLabel ("Website:");
    p.add(labelW, c);

    c.gridx = 1;
    c.gridy = 7;
    fieldW = new JTextField (10);
    p.add(fieldW, c);

    c.gridx = 0;
    c.gridy = 8;
    labelW = new JLabel ("Relationship:");
    p.add(labelW, c);

    c.gridx = 1;
    c.gridy = 8;
    relationship = new JComboBox(relationshipValues);
    p.add(relationship, c);

    c.gridx = 1;
    c.gridy = 9;
    buttonS = new JButton("Save:");
    p.add(buttonS, c);

    c.gridx = 0;
    c.gridy = 10;
    tableDisplay = new JTable();
    p.add(tableDisplay, c);


        // pack the frame for better cross platform support
        f.pack();
        // Make it visible
        f.setVisible(true);
        f.setSize(1400,900); // default size is 0,0
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } // End of Gui Method

    private void UpdateTable() {
        try {
        String sql = "SELECT * FROM contact";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();
        tableDisplay.setModel(DbUtils.resultSetToTableModel(rs));
    }

    catch(Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
    }


    private void tableDisplayMouseClicked(java.awt.event.MouseEvent evt) {                                          

   try {
       int row = tableDisplay.getSelectedRow();
       String tableClick = (tableDisplay.getModel().getValueAt(row, 1).toString());
       String sql = " select * from contact where id = ' " + tableClick + " ' ";
       pst = conn.prepareStatement(sql);
   rs = pst.executeQuery();
       if(rs.next()) {
            System.out.println("hey dude this method is being called.");   
           String add2 = rs.getString("Business_Name");
           fieldBN.setText(add2);   
           String add3 = rs.getString("First_Name");
           fieldFN.setText(add3);   
           String add4 = rs.getString("Last_Name");
           fieldLN.setText(add4);   
           String add5 = rs.getString("Phone");
           fieldP.setText(add5);   
           String add6 = rs.getString("Email");
           fieldE.setText(add6);   
           String add7 = rs.getString("Address_Line_1");
           fieldA.setText(add7);   
           String add8 = rs.getString("Address_Line_2");
           aLine2.setText(add8);   
           String add9 = rs.getString("Website");
           fieldW.setText(add9);                     
       }
   }
  catch(Exception e) {
      JOptionPane.showMessageDialog(null, e);
  }
}    



    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
           public void run() {
                new Driver();

           }
        });
    } // End main Method

       } // End class Driver

最佳答案

很难知道为什么在注册 MouseListener 时遇到问题,没有足够的上下文来诊断问题。

您应该首先在代码中放置 put 语句来检查该方法是否被调用以及查询是否返回值。

如果所有其他方法都失败,您应该尝试手动注册鼠标监听器。请参阅How to Write a Mouse Listener了解更多详情。

您的查询还包括匹配中的空格...

String sql = " select * from contact where id = ' " + tableClick + " ' ";
                                                 ^------------------^-----

这将影响数据库将结果与查询相匹配的能力。尝试删除这些

String sql = " select * from contact where id = '" + tableClick + "'";

关于java - java 中的 mouseclicked 事件无法填充文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22467688/

相关文章:

java - Play Framework : parse "CompletionStage" (Java8) response

java - 如何在启动时将 JFrame 定位到屏幕的右上角

java - 无法解决 Jena IRIFactory 的 NoClassDefFoundError

java - 使用多维数组以不同的顺序打印值

Java:动画 GIF 自动变为部分透明

java - 如何从 JTable 1 到 JTable 2 获取值?

java - JTree 单元格编辑器接收鼠标点击的方式因操作系统而异

java - 尝试将多个 JPanel 添加到 JFrame

java - 按不同的顺序对每一行进行排序

java - 解析日期是 future 几分钟