Java: как курсор автоматически перемещается из одного TextField в другое - PullRequest
7 голосов
/ 22 марта 2012

В моем приложении четыре TextArea, и я хочу ввести только четыре символа в одну область текста, и курсор автоматически переместится на следующую TestArea.Снова, когда я ввожу четыре символа в это TextArea, затем снова курсор автоматически перемещается к следующему TextArea.

Пример: во время установки Windows XP он хочет «Ключ», и есть четыре раздела, когда вы вводите четыре символа в первыйраздел, затем курсор автоматически перемещается к следующему разделу.

То же самое, что я хочу в моем приложении.

Для этого прежде всего я добавляю CustomizedTextFields.jar, а затем создал четыре IntegerField:

private IntegerField text1;
private IntegerField text2;
private IntegerField text3;
private IntegerField text4;

после этого я показываю все эти IntegerField на моем фрейме.

Теперь я попробовал этот код для отправки курсора на следующее поле, но он не работает:

text1.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
                    int a2 = text1.getText().length();
                    if (a2 == 3) {
                        text2.getCursor();
                    }
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
            }
        });

Ответы [ 5 ]

10 голосов
/ 22 марта 2012

достаточно интересный вопрос, чтобы попытаться улучшить мои темные знания о текстовом пакете: -)

Здесь есть два отдельных требования

  • ограничить длину текста: это сделано сDocumentFilter, как уже заметил @mKorbel
  • , автоматически переносит фокус на следующий компонент после достижения максимальной длины: получается, что это можно сделать с помощью NavigationFilter

в коде:

JComponent panel = new JPanel();
final int maxSize = 3;
for (int i = 0; i < 4; i++) {
    final JTextField field = new JTextField(5);
    NavigationFilter filter = new NavigationFilter() {

        @Override
        public void setDot(FilterBypass fb, int dot, Bias bias) {
            if (dot >= maxSize) {
                fb.setDot(0, bias);
                field.transferFocus();
                return;
            }
            fb.setDot(dot, bias);
        }

        @Override
        public void moveDot(FilterBypass fb, int dot, Bias bias) {
            if (dot >= maxSize) { 
                fb.setDot(0, bias);
                field.transferFocus();
                return;
            }
            fb.moveDot(dot, bias);
        }

    };
    field.setNavigationFilter(filter);
    ((AbstractDocument) field.getDocument()).setDocumentFilter(new DocumentSizeFilter(maxSize));
    panel.add(field);
}

DocumentFilter - один из Swing Tutorial

6 голосов
/ 22 марта 2012
At the time of installing Window XP it want "Key" and there are four section 
when you enter four character in first section then cursor automatically move 
to the next section.
  1. добавить DocumentListener к JTextComponents, для прослушивания добавить DocumentFilter

  2. не используйте KeyListener для JTextComponents, используйте только DocumentListener

  3. добавьте обязательные следующие JTextArea к DocumentListener, если там введено 4-е. Символ в JTextArea,

  4. уведомление, перемещение с Focus от одного JTextArea к другому было бы лучше перенесено в invokeLater

1 голос
/ 22 марта 2012

Примерно так должно работать:

text1.addKeyListener(new KeyAdapter(){
          public void keyPressed(KeyEvent e){
             String value=text1.getText();
             if(value.length()==4){
             text2.requestFocus();
          }
}

Где text2 - ваше следующее текстовое поле

1 голос
/ 22 марта 2012

Заменить text2.getCursor() на text2.requestFocus().

getCursor() - для получения формы указателя мыши при наведении курсора на компонент.

Кроме того, с помощью этого метода все еще можно ввести более 4 символов в поле, дляПример, вставив из буфера обмена.Если вы хотите заблокировать это, вам нужно проверить, длиннее ли введенный текст, чем 4 символа, и если это так, взять только первые 4 символа из него.

0 голосов
/ 20 февраля 2018

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

String number=jTextArea1.getText();
 int l=number.length();
 if(l==3){
 jTextArea1.transferFocus();

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...