带有 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” @SubratPatnaikDocumentListener
在每次更新文本字段内容时触发。如果您只想在用户点击回车时做出反应,您需要一个ActionListener
即使使用 DocumentListener 我也有同样的问题。您能否举出与我的问题相关的任何示例...谢谢【参考方案2】:
使用DocumentListener 是在Swing 中为JTextComponents
处理文本事件的首选方法。
数据库查询需要大量资源,并且应该在EDT 之外进行,以防止 UI “冻结”。看看在这个example 中使用SwingWorker
。
请注意,为每个 DocumentEvent
加载数据可能会向数据库发送大量不必要的请求。有两种可能的解决方案:
String
后使用负载JButton
来加载数据。
更新:
短期内:
在查询中添加 SQL 通配符以匹配部分字符串:
st.executeQuery("Select * from facultydtls where sub_code like '%" + jst + "%'");
从长远来看:
使用PreparedStatement
。它有以下好处:
PreparedStatement
占位符字符将采用任何必需的字符串引号。
【讨论】:
@SubratPatnaik 我会说您需要添加 SQL 通配符。查看更新。 即使使用 DocumentListener 我也有同样的问题。您能否举出与我的问题相关的任何示例...谢谢 即使使用 DocumentListener 我也有同样的问题。您能否举出与我的问题相关的任何示例...谢谢以上是关于带有 actionperformed actionlistner 的文本字段 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
我无法弄清楚在actionPerformed中try块中的整数量代替什么?
在Jtable单元格中单击JComboBox时调用ActionPerformed
当在 actionPerformed (Java Swing) 上单击按钮时,如何识别是不是选择了 shift?
jpopupmenu menuitem actionperformed未触发