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?
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();
}
});
Où f
JFrame
et in
votre JTextField
.
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
}
});
public void actionPerformed(ActionEvent arg0)
{
if (arg0.getSource()==clearButton)
{
enterText.setText(null);
enterText.grabFocus(); //Places flashing cursor on text box
}
}
Essayez celui-ci,
myFrame.setVisible(true);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
myComponent.grabFocus();
myComponent.requestFocus();//or inWindow
}
});
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];
}
});
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.
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();
}
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.
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.