2013-04-01 59 views
1

我在尋找一個解決方案來編寫JTextField的監聽器時遇到問題,因爲它只允許整數值(允許爲String)。我試過this recommended link的文檔偵聽,但我不知道調用什麼方法等整數的JTextfield監聽器

我以前從未使用過這種類型的監聽器的,所以任何人都可以解釋我怎麼能在JTextField寫一個監聽器只允許可接受的整數值?

基本上,當我點擊一個JButton之後,並且在數據被提取出一個變量之前,Listener將不允許它被處理,直到輸入一個整數。

非常感謝。

回答

1

你不想要一個文檔監聽器。您需要在提交/確定按鈕上使用ActionListener。

確保聽者與句柄JTextField中創建的,然後把這個代碼在調用actionPerformed

int numberInField; 
try { 
    numberInField = Integer.parseInt(myTextField.getText()); 
} catch (NumberFormatException ex) { 
    //maybe display an error message; 
    JOptionPane.showMessageDialog(null, "Bad Input", "Field 'whatever' requires an integer value", JOptionPane.ERROR_MESSAGE); 
    return; 
} 
// you have a proper integer, insert code for what you want to do with it here 
+0

好的謝謝。我實際上一直在使用parseInt。但有沒有一種方法,如果你試圖輸入一個字符串,那麼somesort的taketip會彈出並說'只需要整數(JTextField將不允許輸入)?或者是太複雜,寫在Java中?再次感謝 –

+0

您可以在上面的catch子句中彈出一條錯誤消息,或者將JLabel放入對話框以顯示錯誤消息。哪個看起來更好取決於你在那裏還有什麼,但一般來說彈出窗口是破壞性的。 [編輯包含錯誤對話框] –

+0

好的感謝您的幫助。對話框是最好的解決方案。再次感謝 –

2

你不想監聽器,你想從JTextField文本並測試它是否是int

if (!input.getText().trim().equals("")) 
{ 
    try 
    { 
     Integer.parseInt(myString); 
     System.out.println("An integer"): 
    } 
    catch (NumberFormatException) 
    { 
     // Not an integer, print to console: 
     System.out.println("This is not an integer, please only input an integer."); 
     // If you want a pop-up instead: 
     JOptionPane.showMessageDialog(frame, "Invalid input. Enter an integer.", "Error", JOptionPane.ERROR_MESSAGE); 
    } 
} 

你也可以使用正則表達式(矯枉過正的一點點,但它的工作原理):

boolean isInteger = Pattern.matches("^\d*$", myString); 
+0

@DouglasGrealis你會在你的'catch'中放入類似的東西。我會更新我的例子。 – syb0rg

+0

好的謝謝。我可以在catch子句中使用對話框。再次感謝 –

1

的JFormattedTextField例如:

public static void main(String[] args) { 
    NumberFormat format = NumberFormat.getInstance(); 
    format.setGroupingUsed(false); 
    NumberFormatter formatter = new NumberFormatter(format); 
    formatter.setValueClass(Integer.class); 
    formatter.setMinimum(0); 
    formatter.setMaximum(Integer.MAX_VALUE); 
    JFormattedTextField field = new JFormattedTextField(formatter); 
    JOptionPane.showMessageDialog(null, field); 
} 

JFormattedTextField行之有效的限制輸入。除了將輸入限制爲數字之外,它還能夠更高級地使用,例如,電話號碼格式。這提供了即時驗證,無需等待表單提交或類似事件。