2012-03-23 41 views
0

我目前正在創建這個java GUI,要求用戶輸入10個條目,然後使用這些值來執行下一個操作。如何限制用戶只輸入數字?

我只想輸入數字或小數點以便它只能是一個浮點值。

如果它不是數字或小數點,它應該提示用戶在執行下一個動作之前再次輸入該特定條目。

我應該怎麼做?

+0

http://docs.oracle.com/javase/tutorial/uiswing/components /formattedtextfield.html – maialithar 2012-03-23 07:52:52

+0

你在使用swing還是applet? – Jayy 2012-03-23 07:53:27

回答

1

對於您想要做的事有多種選擇。舉個例子,你可以檢查here。另一個例子可能是使用格式化的TextField,如here所示。

另一方面,提交後,您可以嘗試將值解析爲floatdouble。如果您有任何例外情況,那麼該值不是數字。

最後,您可以使用正則表達式。諸如^\\d+(\\.\\d+)?$之類的表達式應該匹配任何整數或浮點數。

2

黃,

不知道您是否使用Swing或不...

很久以前我有同樣的問題,我與創建擴展了JTextField類RestrictedTextField解決它。在構造函數中我添加了一個按鍵偵聽器(addKeyListener(新RestrictedKeyAdapter());)

private class RestrictedKeyAdapter extends KeyAdapter { 

    @Override 
    public void keyReleased(KeyEvent e) { 

     if (getText().equals("")) { 
      oldString = ""; 
      return; 
     } else { 
      // if you cannot parse the string as an int, or float, 
      // then change the text to the text before (means: ignore 
      // the user input) 
      try { 
       if (type.equals("int")) { 
        int i = Integer.parseInt(getText()); 
        oldString = getText(); 
       } else if (type.equals("float")) { 
        float f = Float.parseFloat(getText()); 
        oldString = getText(); 
       } else { 
        // do nothing 
       } 
      } catch (NumberFormatException el) { 
       setText(oldString); 
      } 

      // if the text is identical to the initial text of this 
      // textfield paint it yellow. If the text was changed 
      // paint it red. 
      if (initialString.equals(getText())) { 
       setForeground(Color.YELLOW); 
      } else { 
       setForeground(Color.RED); 
      } 
     } 
    } 
} 

的想法是,每次按下該文本框的鍵(並釋放它的話),在文本該文本字段被解析。例如,如果組件只接受浮動,那麼組件會嘗試將其解析爲浮動(Float.parseFloat(..))。如果解析成功,一切都很好。如果解析失敗(拋出NumberFormatException),則舊文本將被寫回到文本字段中(字面上忽略用戶輸入)。

我認爲你可以直接添加到KeyAdapter的JTextField中沒有創建一個專用類,但這種解決方案,你可以記住初始字符串和老字符串。

你可以玩代碼..如果輸入有效或不可以(或者如果文本與初始字符串相同,則在我的代碼片段中)可以更改文本字段的顏色。

一個附加評論:我設置的文本字段的「類型」在名稱爲「類型」,這是簡單地用值「INT」的字符串,「浮動」的變量,等....更好解決辦法是在這裏例如,當然枚舉...

我希望這是有益...

蒂莫

+0

不輸入驗證 – kleopatra 2012-03-23 11:07:42

+0

使用keyListeners不斷,尤其不能...........爲什麼? – 2012-03-23 19:00:12

+0

Ctrl + V或特殊的OS功能。 – 2014-03-14 10:41:43