Я создал одну форму с помощью Swing в Java. В форме я использовал одно текстовое поле, на котором я должен установить фокус всякий раз, когда я нажимаю клавишу. Как настроить фокус на конкретном компоненте Java?Как вы фокусируетесь на текстовом поле в Swing?
ответ
Может ли Component.requestFocus()
предоставить вам то, что вам нужно?
Спасибо, позвольте мне посмотреть, работает ли это для меня или нет. –
Принял меня на пять минут, чтобы найти его ... так много для «простого» поиска :-(- хорошо, документы API Java API не являются образцом ясности в любом случае :-) – Joey
FYI, [javadocs для JComponent] (http://docs.oracle.com/javase/7/docs/api/index.html) говорят о 'requestFocus()', "использовании этого метод обескуражен, потому что его поведение зависит от платформы. мы рекомендуем использовать [requestFocusInWindow()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#requestFocusInWindow()). Если вам нужна дополнительная информация о фокусе, см. [Как использовать подсистему фокуса] (http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html), раздел в учебнике по Java . » –
Теперь, когда мы искали API, все, что нам нужно сделать, это прочитать API.
Согласно документации API:
"Поскольку поведение фокус этого метода зависит от платформы, разработчики настоятельно рекомендуется использование requestFocusInWindow когда возможно."
Это будет работать.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Component.requestFocus();
}
});
Обратите внимание, что все вышеперечисленное не работает по какой-либо причине на JOptionPane. После долгих проб и ошибок (более вышеуказанных 5 минут, во всяком случае), вот что, наконец, работал:
final JTextField usernameField = new JTextField();
// ...
usernameField.addAncestorListener(new RequestFocusListener());
JOptionPane.showOptionDialog(this, panel, "Credentials", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null);
public class RequestFocusListener implements AncestorListener {
@Override
public void ancestorAdded(final AncestorEvent e) {
final AncestorListener al = this;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JComponent component = e.getComponent();
component.requestFocusInWindow();
component.removeAncestorListener(al);
}
});
}
@Override
public void ancestorMoved(final AncestorEvent e) {
}
@Override
public void ancestorRemoved(final AncestorEvent e) {
}
}
благодарю вас за это решение. он работал. – MyPasswordIsLasercats
Вы также можете использовать JComponent.grabFocus();
это те же
Javadoc для [JComponent.grabFocus()] (http://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#grabFocus--) явно заявляет, что этот метод должен не используется клиентским кодом и предлагает использовать метод 'requestFocusInWindow()', о котором уже упоминалось в других ответах. –
10 вопросов, принято ни один из них ответы ... –