java - quitar - Cómo establecer el foco en JTextField?
quitar foco jtextfield (9)
Aunque yourTextField.requestFocus()
es una solución, no es el mejor ya que en la documentación oficial de Java esto es desalentador ya que el método requestFocus()
depende de la plataforma.
La documentación dice:
Tenga en cuenta que se desaconseja el uso de este método porque su comportamiento depende de la plataforma. En su lugar, recomendamos el uso de requestFocusInWindow ().
Utilice yourJTextField.requestFocusInWindow()
lugar.
Hago que mi juego se ejecute sin mouse, por lo que usar el puntero no es una opción. El menú de puntuación más alta se mostrará cuando el jugador pierda.
este es mi código
highScore=new MyTextField("Your Name");
highScore.addKeyListener(this);
highScore.setFont(font);
highScore.requestFocusInWindow();
Yo he tratado
highScore.setFocusable(true);
highScore.requestFocusInWindow();
highScore.requestFocus(true);
highScore.requestFocus();
pero aún no ganó el foco en mi JTextField
.
¿Cómo enfocarlo?
En mi caso, nada de lo anterior funcionó hasta que llamé a requestFocus () DESPUÉS de que mi constructor haya regresado.
MyPanel panel = new MyPanel(...);
frame.add(panel);
panel.initFocus();
MyPanel.initFocus () tendría:
myTextField.requestFocus();
Y funciona.
Este código mouse cursor "jtextfield" "Jcombobox" ubicación enfocada
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();
}
No funcionó para mí cuando intenté usar:
JOptionPane.showConfirmDialog(...)
Pero, ¡encontré una solución! Muy primitivo, pero funciona.
Solo salta al campo por java.awt. Robot usando la tecla "Tab". Por ejemplo:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_TAB);
robot.delay(100);
robot.keyRelease(KeyEvent.VK_TAB);
Si debe presionar varias veces en "Tab" para obtener su Componente, puede usar el siguiente método:
GUIUtils.pressTab(3);
Definición:
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 la ubicación de su Componente es dinámica, puede ejecutar el ciclo while sin limitación, pero agregue algún detector de enfoque en el componente, para detener el bucle una vez que haya llegado a él.
Prueba este,
myFrame.setVisible(true);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
myComponent.grabFocus();
myComponent.requestFocus();//or inWindow
}
});
Si desea que su JTextField
se enfoque cuando aparezca su GUI, puede usar esto:
in = new JTextField(40);
f.addWindowListener( new WindowAdapter() {
public void windowOpened( WindowEvent e ){
in.requestFocus();
}
});
Donde f
sería tu JFrame
y está tu JTextField
.
Si la página contiene múltiples elementos y desea establecer la secuencia de tabulación y el enfoque, sugeriré que use FocusTraversalPolicy.
grabFocus () no funcionará si está utilizando FocusTraversalPolicy.
Código de muestra
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];
}
});
si hay solo un contenedor de nivel superior, las últimas líneas en el constructor de la GUI serían, por ejemplo,
.
.
.
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
}
}