带有 actionperformed actionlistner 的文本字段 [关闭]

Posted

技术标签:

【中文标题】带有 actionperformed actionlistner 的文本字段 [关闭]【英文标题】:textfield with actionperformed actionlistner [closed] 【发布时间】:2012-11-01 13:20:53 【问题描述】:

我有一个 jTextField 和一个 jLabel。我想在用户完成输入后自动从数据库中获取数据到我的标签。

subcode_txt.addKeyListener(new KeyAdapter() 
        @Override
        public void keyPressed(KeyEvent e) 
            Object obj=e.getSource();
            if(obj==subcode_txt)
            jst=subcode_txt.getText();
            try

            rs=st.executeQuery("Select * from facultydtls where sub_code like '"+jst+"'");
            rs.next();
            faculty_lab.setText(rs.getString("f_name"));
            sem_lab.setText(rs.getString("sem"));
            subject_lab.setText(rs.getString("sub"));
            department_lab.setText(rs.getString("dept"));

            rs.close();

        
        catch(Exception ewt)
            JOptionPane.showMessageDialog(null,"Invalid Subject Code");
        
            
        
    );

【问题讨论】:

【参考方案1】:
    如果您想对用户输入做出反应,DocumentListener 是比KeyListener 更好的方法 你可以选择ActionListener,当用户点击ENTER时触发 不应在事件调度线程上执行数据库查询。请改用工作线程。更多信息请参见Concurrency in Swing close 语句应放在finally 块中

话虽如此,你到底在问什么?

【讨论】:

我用 DocumentListner 做到了。但是每次我输入一个字母时都会显示“Invalid Subject Code” @SubratPatnaik DocumentListener 在每次更新文本字段内容时触发。如果您只想在用户点击回车时做出反应,您需要一个ActionListener 即使使用 DocumentListener 我也有同样的问题。您能否举出与我的问题相关的任何示例...谢谢【参考方案2】:

使用DocumentListener 是在Swing 中为JTextComponents 处理文本事件的首选方法。

数据库查询需要大量资源,并且应该在EDT 之外进行,以防止 UI “冻结”。看看在这个example 中使用SwingWorker

请注意,为每个 DocumentEvent 加载数据可能会向数据库发送大量不必要的请求。有两种可能的解决方案:

使用 Ehcache 等框架进行数据缓存 - 以最佳方式加载数据。 虽然与您的要求有所不同,但您可以在用户提供完整的String 后使用负载JButton 来加载数据。

更新:

短期内:

在查询中添加 SQL 通配符以匹配部分字符串:

st.executeQuery("Select * from facultydtls where sub_code like '%" + jst + "%'");

从长远来看:

使用PreparedStatement。它有以下好处:

防止 SQL 注入攻击,尤其是考虑到用户可以输入作为 SQL 查询一部分的字符串。 PreparedStatement 占位符字符将采用任何必需的字符串引号。

【讨论】:

@SubratPatnaik 我会说您需要添加 SQL 通配符。查看更新。 即使使用 DocumentListener 我也有同样的问题。您能否举出与我的问题相关的任何示例...谢谢 即使使用 DocumentListener 我也有同样的问题。您能否举出与我的问题相关的任何示例...谢谢

以上是关于带有 actionperformed actionlistner 的文本字段 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我无法弄清楚在actionPerformed中try块中的整数量代替什么?

在Jtable单元格中单击JComboBox时调用ActionPerformed

当在 actionPerformed (Java Swing) 上单击按钮时,如何识别是不是选择了 shift?

jpopupmenu menuitem actionperformed未触发

Java Swing 在等待方法时在 actionPerformed 函数中更改 UI 两次

在java里actionPerformed是做什么用的