Подтвердить что ты не робот

Как настроить фокусировку на JTextField?

Я запускаю игру без мыши, поэтому использование указателя не является выбором. Меню "Высокое значение" покажет, когда проигрывается проигрыватель.

это мой код

    highScore=new MyTextField("Your Name");
    highScore.addKeyListener(this);
    highScore.setFont(font);
    highScore.requestFocusInWindow();

Я пробовал

highScore.setFocusable(true);
highScore.requestFocusInWindow();
highScore.requestFocus(true);
highScore.requestFocus();

но все еще не сосредоточился на моем JTextField.

Как сфокусировать его?

4b9b3361

Ответ 1

Если вы хотите, чтобы ваш JTextField был сфокусирован, когда отображается ваш графический интерфейс, вы можете использовать это:

in = new JTextField(40);
f.addWindowListener( new WindowAdapter() {
    public void windowOpened( WindowEvent e ){
        in.requestFocus();
    }
}); 

Где f будет вашим JFrame и in является ваш JTextField.

Ответ 2

Если есть только один Контейнер верхнего уровня, то последние строки в GUI-конструкторе будут, например,

.
.
.
myFrame.setVisible(true);
EventQueue.invokeLater(new Runnable() {

   @Override
     public void run() {
         myComponent.grabFocus();
         myComponent.requestFocus();//or inWindow
     }
});

Ответ 3

public void actionPerformed(ActionEvent arg0)
{
    if (arg0.getSource()==clearButton)
    {
        enterText.setText(null);
        enterText.grabFocus();  //Places flashing cursor on text box        
    }       
}

Ответ 4

Попробуйте это,

myFrame.setVisible(true);
EventQueue.invokeLater(new Runnable() {

   @Override
     public void run() {
         myComponent.grabFocus();
         myComponent.requestFocus();//or inWindow
     }
});

Ответ 5

Если страница содержит несколько элементов и, как правило, для настройки последовательности вкладок и фокуса, я предлагаю использовать FocusTraversalPolicy.

grabFocus() не будет работать, если вы используете FocusTraversalPolicy.

Пример кода

int focusNumber = 0;
Component[] focusList;
focusList = new Component[] { game, move, amount, saveButton,
            printButton, editButton, deleteButton, newButton,
            settingsButton };

frame.setFocusTraversalPolicy(new FocusTraversalPolicy() {

        @Override
        public Component getLastComponent(Container aContainer) {
            return focusList[focusList.length - 1];
        }

        @Override
        public Component getFirstComponent(Container aContainer) {
            return focusList[0];
        }

        @Override
        public Component getDefaultComponent(Container aContainer) {
            return focusList[1];
        }

        @Override
        public Component getComponentAfter(Container focusCycleRoot,
                Component aComponent) {
            focusNumber = (focusNumber + 1) % focusList.length;
            if (focusList[focusNumber].isEnabled() == false) {
                getComponentAfter(focusCycleRoot, focusList[focusNumber]);
            }
            return focusList[focusNumber];
        }

        @Override
        public Component getComponentBefore(Container focusCycleRoot,
                Component aComponent) {
            focusNumber = (focusList.length + focusNumber - 1)
                    % focusList.length;
            if (focusList[focusNumber].isEnabled() == false) {
                getComponentBefore(focusCycleRoot, focusList[focusNumber]);
            }
            return focusList[focusNumber];
        }
    });

Ответ 6

В моем случае ничего выше не работало, пока я не вызвал requestFocus() ПОСЛЕ, мой конструктор вернулся.

MyPanel panel = new MyPanel(...);
frame.add(panel);
panel.initFocus();

MyPanel.initFocus() будет иметь:

myTextField.requestFocus();

И он работает.

Ответ 7

Этот курсор мыши "jtextfield" "Jcombobox" сосредоточен на местоположении

 try {
     Robot  robot = new Robot();
        int x = Jtextfield.getLocationOnScreen().x;
        int y=  Jtextfield.getLocationOnScreen().y;
       JOptionPane.showMessageDialog(null, x+"x< - y>"+y);// for I location see
        robot.mouseMove(x, y);
    } catch (AWTException ex) { 
        ex.printStackTrace();
    } 

Ответ 8

Это не работает для меня, когда пытался использовать:

JOptionPane.showConfirmDialog(...)

Но - Я нашел решение! Очень примитивно, но работает.

Просто прыгайте на поле с помощью java.awt.Робот с помощью клавиши "Tab". Например:

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_TAB);
robot.delay(100);
robot.keyRelease(KeyEvent.VK_TAB);

Если вам нужно нажать несколько раз на "Tab", чтобы получить компонент, вы можете использовать следующий метод:

GUIUtils.pressTab(3);

Определение:

public static void pressTab(int amountOfClickes)
{
    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            try
            {
                Robot robot = new Robot();
                int i = amountOfClickes;
                while (i-- > 0)
                {
                    robot.keyPress(KeyEvent.VK_TAB);
                    robot.delay(100);
                    robot.keyRelease(KeyEvent.VK_TAB);
                }
            }
            catch (AWTException e)
            {
                System.out.println("Failed to use Robot, got exception: " + e.getMessage());
            }
        }
    });
}

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

Ответ 9

Хотя yourTextField.requestFocus() является решением, оно не является лучшим, поскольку в официальной документации по Java это не рекомендуется, поскольку метод requestFocus() зависит от платформы.

В документации сказано:

Обратите внимание, что использование этого метода не рекомендуется, потому что его поведение зависит от платформы. Вместо этого мы рекомендуем использовать requestFocusInWindow().

Вместо этого используйте yourJTextField.requestFocusInWindow().

Ответ 10

EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
       jTextfield.grabFocus();
       jTextfield.requestFocus();
   }
});