2013-04-01 3 views
1

У меня возникли проблемы с поиском решения для записи слушателя для JTextField, в частности, чтобы разрешать только целочисленные значения (допустимо не String). Я пробовал this recommended link на прослушивании документов, но я не знаю, какой метод вызывать и т. Д.Слушатель JTextfield для целых чисел

Я никогда не использовал этот тип слушателя раньше, так что кто-нибудь может объяснить, как я мог бы написать прослушиватель на JTextField разрешать только целочисленные значения?

В основном после того, как я нажму JButton, и до того, как данные будут извлечены из переменной, Listener не разрешит ее обрабатывать до тех пор, пока не будет введено целое число.

Большое спасибо.

ответ

1

Вы не хотите прослушиватель документов. Вы хотите, чтобы ActionListener на кнопке submit/ok.

Убедитесь, что слушатель создается с ручкой в ​​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

OK спасибо. Я действительно использовал parseInt. Но есть ли способ, который, если вы попытаетесь ввести String, появится всплывающее сообщение somesort и скажет: «Требуется только ints (JTextField не разрешает ввод)? Или это слишком сложно написать в java? Еще раз спасибо –

+0

Вы можете вывести сообщение об ошибке в предложение catch выше, или поместить JLabel в ваше диалоговое окно для отображения сообщения об ошибке. Что будет выглядеть лучше, зависит от того, что еще у вас есть, но, вообще говоря, всплывающие окна являются разрушительными. [отредактировано, чтобы включить диалоговое окно с ошибкой] –

+0

OK спасибо за помощь. Диалоговое окно - лучшее решение. Еще раз спасибо –

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

OK спасибо. Я могу использовать диалоговое окно в предложении catch. еще раз спасибо –

1

, как я мог бы написать слушателя в JTextField, чтобы только целые значения, которые могут быть принятым?

Вы должны использовать JFormattedTextField или Document Filter.

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 хорошо работает для ограничения ввода. В дополнение к ограничению ввода чисел, он способен к более продвинутому использованию, например. формат номера телефона. Это обеспечивает немедленную проверку без необходимости ждать отправки формы или подобного события.

Смежные вопросы