Как настроить фокусировку на 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
.
Как сфокусировать его?
Ответы
Ответ 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();
}
});