2017-03-02 44 views
0

無法解決此問題。 我想檢索我在textType上用keyTyped編寫的文本,並將int放在String上。但如果我這樣做,它給了我一個空白的字符串。我能做什麼?keyTyped給出JTextField爲空

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

這是什麼代碼試圖做?對不起,但它看起來很亂。意見建議:1)擺脫關鍵聽衆。您不應該將KeyListeners添加到Swing文本組件,因爲這會混淆文本組件的固有功能(正如您發現的那樣)。相反,使用DocumentListeners或DocumentFilters,因爲許多類似的問題答案會告訴你。 3)爲什麼每次聆聽者被激活時你都在讀取和重新讀取文件?這看起來像你讓程序做了不必要的和昂貴的重複操作。不要這樣做。一次讀入文件。 –

+0

基本上我想要做的是閱讀用戶的輸入,這個輸入(這是一個數字)將在包含數字和日期列表的.txt文件中搜索。例如:.txt文件的第一行是「1:1-01-2017」,第二行是2:8-01-2017「第三行是」3:15-01-2017等。所以我想要做的就是在這個.txt文件中搜索「:」之前的數字,當它找到它時,在另一個文本字段中寫入日期。例。用戶在textfield1「3」中寫入時,程序將在.txt文件中搜索「:」之前的數字3,並且當它找到它時,會將日期寫入另一個文本字段。 – Karlken

回答

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中,該按鈕在按下按鍵時激活,並從此偵聽器中搜索ArrayList。
  • 你應該差不多從來沒有有空的catch塊,就像我們在上面的代碼中看到的那樣。至少打印堆棧跟蹤,因爲你的代碼可能會忽略它們,因此你可能會在沒有你的知識的情況下完全拋出異常而出現問題。