keyTyped给JTextField留空

时间:2017-03-02 17:06:39

标签: java swing keylistener

无法解决这个问题。 我想用keyTyped检索我在文本字段上写的文本,并将int放在String上。但如果我这样做,它会给我一个空白的字符串。我该怎么办?

textField_9.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e){
            xw = textField_9.getText(); //should retrieve my input 
        }
        public void keyTyped(KeyEvent e) {
            char c = e.getKeyChar(); 
            if((!(Character.isDigit(c)) && (c!='.'))){ 
                e.consume(); 
            }
            System.out.println(xw); //gives nothing ("") not null
            numero = e.getKeyChar();
            String fileName =  defaultx+"\\"+"Contratti"+"\\"+textField_7.getText()+"\\"+"lista"+tipo;
            Scanner scanner;
            try {
                scanner = new Scanner(new File(fileName));
                scanner.useDelimiter(":");

                while(scanner.hasNext()){
                    num = scanner.next();
                    System.out.println("Numero = "+num+"\t"+xw); //debug
                    dat = scanner.nextLine().replaceAll(":", "");   
                    if(num == xw){ 
                        try(Scanner scanner1 = new Scanner(dat)){
                            scanner1.useDelimiter(":");   
                            giorno = scanner1.next();
                            meset = scanner1.next();
                            anno = scanner1.next();
                            System.out.println(giorno+"-"+meset+"-"+anno); //debug

                        }catch(NoSuchElementException ex){

                        }
                    }else{
                        System.out.println("Dato non trovato");
                    }
                }
                scanner.close();
            } catch (FileNotFoundException e1) {

            } catch(NoSuchElementException e1){

            }

        }
    });

示例

我在JTextField写入数字“5”,xw应该是“5”但是它将是“”

1 个答案:

答案 0 :(得分:2)

  

基本上我尝试做的是阅读用户的输入,这个输入(这是一个数字)将在.txt文件中搜索,该文件包含一个数字和日期列表。例如:.txt文件的第一行是" 1:1-01-2017"第二行是2:8-01-2017"第三行是" 3:15:01:2017等。

一次中读取此数据,而不是每按一次按键,因为您正在尝试执行上述操作,也许在类的构造函数中执行此操作。然后将数据存储在可搜索的集合中,可能是自定义类的数组列表。

  

所以我想做的是在"之前搜索这个.txt文件中的数字:"当它找到它时,在另一个文本字段中写入日期。例。用户在textfield1" 3"中写入,程序将在.txt文件中搜索"之前的数字3:"当它找到它时,会将日期写入另一个文本域。

保存文本文件数据的自定义类应在各自的字段中保存单独的数字,并在需要时再次搜索这些对象的ArrayList。

另外:

  • 不要将KeyListener添加到JTextField,因为这可能会阻止JTextField正常运行(因为您正在查找)。
  • 我们有时会在JTextField的文档中添加DocumentListener或DocumentFilter以获取类似的行为......
  • 但在你的情况下,我也不会这样做。而是将一个ActionListener添加到JTextField,一个在按下 ENTER 键时激活的侦听器,并从该侦听器中搜索ArrayList。
  • 你应该永远不会拥有空的catch块,正如我们在上面的代码中看到的那样。至少打印出堆栈跟踪,因为你的代码会忽略它们,因此很可能会在你不知情的情况下完全抛出异常时遇到问题。