在超时后清除JTextfields

时间:2015-02-01 11:33:56

标签: java swing

我有一个程序可以通过输入条形码来检查价格。我希望条形码字段在读取第一个条形码后自动清除。它应该只保留输入的信息5秒钟,并清除下一个条目。

这是我的代码,正在使用JFrame。它运作良好,但需要一些帮助来确定每个条目的会话时间。

private void txt_barcodeKeyReleased(java.awt.event.KeyEvent evt) {
    try {
        String sql = "select * from items where barcode=?" ;
        pst = conn.prepareStatement(sql);
        pst.setString(1, txt_barcode.getText());

        rs = pst.executeQuery();
        if (rs.next()) {
            String add1 = rs.getString("item_des");
            txt_description.setText(add1);
            String add2 = rs.getString("retail1");
            txt_price.setText(add2);
        }
    } catch (Exception ex) {
        JOptionPane.showMessageDialog(null, ex);
    }
}

3 个答案:

答案 0 :(得分:1)

使用延迟5秒的定时器并将ActionPerformed设置为在JTextField上调用.setText("")。

http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html

答案 1 :(得分:0)

  • 请勿使用KeyListener,尤其是文本组件。如果您想知道文本组件何时发生更改,请改用DocumentListener
  • 使用Swing javax.swing.Timer在将来的所需时间设置回调,只需确保使用setRepeats(false),因此它只会触发一次。

请参阅:

了解更多详情

作为替代方案,您可以在填充后在文本字段上调用selectAll。这将确保应用的下一个值(键入时)将其擦除干净。

setText也会清除该字段,并将其内容替换为您指定的内容

答案 2 :(得分:0)

您应该使用线程或计时器,在5000毫秒后调用将清除JTextField项。 检查此链接 Simple timer code

java.lang.Thread javadoc