2013-04-10 2 views
5

Я работаю на судоку решатель, и я стараюсь, чтобы ограничить количество номеров пользователь может ввести в клетку, а также ТОЛЬКО будучи в состоянии вводить цифры, в настоящее время это также принимает письма. На данный момент он работает следующим образом: если пользователь вводит «11125455876», он будет использовать только последнее введенное число (в данном случае «6»). Я хотел бы ограничить количество номеров, которые пользователь может ввести в одну ячейку в 1, и принимать только номера 1-9. Я не совсем уверен, как я могу это сделать. Так что, возможно, он просто перезапишет предыдущий номер или что-то еще, и если я нажму буквенный ключ как «а», ничего не должно произойти.Ограничение ввода номера JTextField

Вот мой код:

public PanelGUI(int size) { 

    super(size); 
    NumberFormat f = NumberFormat.getInstance(); 
    f.setMaximumIntegerDigits(1); 
    f.setMinimumIntegerDigits(0); 
    f.setGroupingUsed(false); 
    cells = new JTextField[size][size]; 
    panel.setLayout(new GridLayout(size, size)); 
    for (int i = 0; i < size; i++) { 
     for (int j = 0; j < size; j++) { 
      cells[i][j] = new JFormattedTextField(f); 
      cells[i][j].setEditable(true); 
      cells[i][j].setFont(boldFont); 
      cells[i][j].setBorder(BorderFactory.createMatteBorder(1, 1, 1, 
        1, Color.white)); 
      cells[i][j].setHorizontalAlignment(JTextField.CENTER); 
      panel.add(cells[i][j]); 
     } 
    } 
} 

Как вы можете видеть, что я сейчас использую number format.

+1

Использовать [ 'DocumentFilter'] (http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/text/DocumentFilter.html) для ограничения ввода. –

+0

@Extreme Coders Не могли бы вы написать ответ о том, как он должен выглядеть в моем случае? Я не слишком хорошо знаком с этим. Что нужно изменить? – Rob

+0

http://stackoverflow.com/questions/3519151/how-to-limit-the-number-of-characters-in-jtextfield – herinkc

ответ

3
NumberFormat f = NumberFormat.getInstance(); 
f.setMaximumIntegerDigits(1); 
f.setMinimumIntegerDigits(0); 
f.setGroupingUsed(false); 

Вы хотите использовать MaskFormat instread:

MaskFormatter f = new MaskFormatter("#"); 
f.setValidCharacters("123456789"); 
+0

Я пробовал то, что вы упомянули, но это дает мне ошибку и говорит мне либо добавлять объявление броска, либо окружать с помощью try/catch. Не получилось работать с ними. – Rob

+1

Итак, добавьте try/catch. Это стандартное программирование на Java и ничего особенного для этого кода. Вам нужно знать, как обрабатывать исключения. Вы всегда можете найти форум/wed, например, использовать try/catch. – camickr

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