2010-11-21 22 views
1

我有一個InputVerifierjTextField檢查並查看來自用戶的輸入是否是整數。如果不是,我想把它恢復到最後的好價值。我如何做到這一點?這裏是我到目前爲止的代碼:恢復jTextField以保持良好的價值

class IntegerVerifier extends InputVerifier { 

    public boolean verify(JComponent input) { 
      JTextField text = (JTextField)input; 
      String old = text.getText(); 
     try { 
      Integer.parseInt(text.getText().trim()); 
     } catch (NumberFormatException e) { 
      // this does not work b/c input is not a TextField 
      input.setText(old); 
     } 
     return true; 
    } 

} 

編輯:下面是我最終使用的解決方案。我最初嘗試過這個,但似乎沒有工作。我發現錯誤在測試中。啓動gui後,我試圖將文本字段更改爲無效值,但會將該字段清空。然而,gui剛開始的時候textfield就有了重點,所以我認爲它的初始值是空的。後續更改的行爲如預期。

class IntegerVerifier extends InputVerifier { 
    public boolean verify(JComponent input) { 
     JTextField text = (JTextField) input; 
     String old = text.getText(); 
     try { 
      Integer.parseInt(text.getText().trim()); 
     } catch (NumberFormatException e) { 
      text.setText(old); 
      //return false; // don't use this otherwise it won't revert the value 
     } 
     return true; 
    } 
} 

回答

1

你的問題指向不同的問題,即你的代碼中的註釋。如果當前輸入無效,則應在驗證之後保存舊值,然後還原。您應該致電text.setText()而不是input.setText()。像這樣:

class IntegerVerifier extends InputVerifier { 
    String lastGood = ""; 
    public boolean verify(JComponent input) { 
     JTextField text = (JTextField)input; 
     String value = text.getText().trim(); 
     try { 
      Integer.parseInt(value); 
      lastGood = value; 
     } catch (NumberFormatException e) { 
      text.setText(lastGood); 
      // assumed it should return false 
      return false; 
     } 
     return true; 
    } 
} 
0

而不是通過JComponent,只是傳遞字符串值。

相關問題