2013-05-20 3 views
1

Я делаю небольшую игру Судоку с графическим интерфейсом и использовать MaskFormatter для JFormattedTextFields:Java - JFormattedTextField не позволяет ввод первой попытки

formatter = new MaskFormatter(s); 
formatter.setValidCharacters("123456789"); 

Но моя проблема заключается в том, что, когда окно открывается, и я нажимаю в одно из этих полей невозможно ввести что-либо,
он работает только во второй попытке, а именно, когда я нажимаю на другое поле, а затем обратно на первое.

Похоже, что нужно сначала сбрасывать фокус, чтобы активировать?

Если какой-либо из моих кодов необходим, пожалуйста, дайте мне знать.

Вот как это выглядит

enter image description here

EDIT: Проблема здесь:

if (guessMatrix[i][j] == 0) { 
    tfM[j][i].setBackground(Color.yellow); 
    tfM[j][i].setText(""); 

Без SetText ("") он отлично работает.

+0

'Если некоторые из моего кода необходимо, пожалуйста, дайте мне know' - Дать [SSCCE] (http://sscce.org/), который демонстрирует проблему. Скорее всего, когда вы создаете SSCCE, вы обнаружите проблему. Вам не нужно вызывать requestFocusInWindow(), так как фокус автоматически переходит к первому компоненту. – camickr

+0

@camickr Вы были правы, я только что нашел проблему, я отредактирую свой пост –

+0

См. Также этот [альтернативный] (http://stackoverflow.com/a/4151403/230513) подход. – trashgod

ответ

0

Я думаю, что у вас есть проблема в создании объекта MaskFormatter. вы создаете объект с шаблоном маскировки, а затем после установки действительных символов.

MaskFormatter formatter = new MaskFormatter("#"); 
formatter.setValidCharacters("123456789"); 
JFormattedTextField txt = new JFormattedTextField(formatter); 

Эта работа прекрасно, когда вы нажимаете на текстовое поле и введите любое число (1-9) только это позволит, но вы вводите, не число, то не позволяют.

Спасибо, Jignesh Gothadiya

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