Comment se concentrer sur JTextField?

je fais tourner mon jeu sans souris donc utiliser le pointeur n'est pas un choix. Menu High Score affichera lorsque le joueur perd.

c'est mon code

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

j'ai essayé

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

mais pas encore mis l'accent sur mon JTextField.

comment se concentrer?

29
demandé sur mKorbel 2011-07-17 14:32:55

9 réponses

si vous voulez votre JTextField pour être concentré lors de votre interface, vous pouvez utiliser ceci:

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

fJFrame et in votre JTextField.

46
répondu Lukas Knuth 2011-07-17 10:42:31

si seulement un Conteneur De Premier Niveau alors les dernières lignes dans GUI constructor seraient par exemple

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

   @Override
     public void run() {
         myComponent.grabFocus();
         myComponent.requestFocus();//or inWindow
     }
});
6
répondu mKorbel 2011-07-17 10:49:20
public void actionPerformed(ActionEvent arg0)
{
    if (arg0.getSource()==clearButton)
    {
        enterText.setText(null);
        enterText.grabFocus();  //Places flashing cursor on text box        
    }       
}
5
répondu kprice789 2013-11-17 03:32:57

Essayez celui-ci,

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

   @Override
     public void run() {
         myComponent.grabFocus();
         myComponent.requestFocus();//or inWindow
     }
});
0
répondu Dulkith Bataduwa 2015-05-30 06:20:41

si la page contient plusieurs items et que vous aimez définir la séquence d'onglets et la mise au point, je vous suggérerai D'utiliser FocusTraversalPolicy.

grabFocus () ne fonctionnera pas si vous utilisez FocusTraversalPolicy.

exemple de code

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];
        }
    });
0
répondu MukeshKoshyM 2015-07-19 05:35:57

dans mon cas rien ci-dessus n'a fonctionné jusqu'à ce que j'appelle requestFocus () après mon constructeur est de retour.

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

MyPanel.initFocus () aurait:

myTextField.requestFocus();

Et ça fonctionne.

0
répondu Peter Quiring 2016-02-15 21:10:32

ce curseur de souris de code "jtextfield"" Jcombobox " pointé

 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();
    } 
0
répondu Habib Göker 2017-05-02 17:55:55

Il n'a pas de travail pour moi lorsque j'essaye de l'utiliser:

JOptionPane.showConfirmDialog(...)

mais - j'ai trouvé une solution ! Très primitif, mais qui fonctionne.

Juste sauter sur le terrain par java.awt. Robot utiliser la touche "Tab". Par exemple:

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

si vous appuyez plusieurs fois sur "Tab" pour obtenir votre composant, vous pouvez utiliser la méthode suivante:

GUIUtils.pressTab(3);

Définition:

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());
            }
        }
    });
}

si l'emplacement de votre composant est dynamique, vous pouvez exécuter la boucle while sans limitation, mais ajoutez un écouteur de focus sur le composant, pour arrêter la boucle une fois qu'elle y est arrivée.

0
répondu Adir 2018-05-16 08:26:32

yourTextField.requestFocus() est Une solution, elle n'est pas la meilleure puisque dans l'officiel de la documentation de Java c'est de décourager la méthode requestFocus() dépend de la plateforme.

La documentation dit:

notez que l'utilisation de cette méthode est déconseillée car son comportement dépend de la plateforme. Nous recommandons plutôt l'utilisation de requestFocusInWindow ().

Utiliser yourJTextField.requestFocusInWindow() à la place.

0
répondu ojonugwa ochalifu 2018-05-20 11:15:01