Spec-Zone .ru
спецификации, руководства, описания, API
|
События фокуса запускаются всякий раз, когда компонент получает или теряет клавиатурный фокус. Это - истина, происходит ли изменение в фокусе через мышь, клавиатуру, или программно. Чтобы стать знакомыми с основными понятиями фокуса или получить подробную информацию о фокусе, см., Как Использовать Подсистему Фокуса.
Этот раздел объясняет, как получить события фокуса для определенного компонента, регистрируясь a FocusListener
экземпляр на этом. Чтобы получить фокус для окна только, реализуйте a WindowFocusListener
экземпляр вместо этого. Чтобы получить состояние фокуса многих компонентов, рассмотрите реализацию a PropertyChangeListener
экземпляр на KeyboardFocusManager
class, как описано в Отслеживании Изменений Фокуса к Многократным Компонентам в том, Как Использовать Подсистему Фокуса.
Следующий пример демонстрирует события фокуса. Множество оконных дисплеев компонентов. Слушатель фокуса, зарегистрированный на каждом компоненте, сообщает о каждом полученном фокусом и потерянном фокусом событии. Для каждого события сообщают о другом компоненте, включенном в изменение фокуса, противоположный компонент. Например, когда фокус идет от кнопки до текстового поля, потерянное фокусом событие запускается кнопкой (с текстовым полем как противоположный компонент), и затем полученное фокусом событие запускается текстовым полем (с кнопкой как противоположный компонент). Потерянные фокусом так же как полученные фокусом события могут быть временными. Например, временное потерянное фокусом событие имеет место, когда окно теряет фокус. Временное полученное фокусом событие имеет место в раскрывающихся меню.
setRequestFocusEnabled(false)
.setRequestFocusEnabled(false)
на текстовой области. Демонстрационный пример мог использовать setFocusable(false)
чтобы действительно удалить текстовую область из цикла фокуса, но это имело бы неудачный эффект создания компонента, недоступного тем, кто использует вспомогательные технологии.Полный код для этого демонстрационного примера находится в FocusEventDemo.java
файл. Следующий фрагмент кода представляет механизм обработки событий фокуса:
public class FocusEventDemo ... implements FocusListener ... { public FocusEventDemo() { ... JTextField textField = new JTextField("A TextField"); textField.addFocusListener(this); ... JLabel label = new JLabel("A Label"); label.addFocusListener(this); ... JComboBox comboBox = new JComboBox(vector); comboBox.addFocusListener(this); ... JButton button = new JButton("A Button"); button.addFocusListener(this); ... JList list = new JList(listVector); list.setSelectedIndex(1); //It's easier to see the focus change //if an item is selected. list.addFocusListener(this); JScrollPane listScrollPane = new JScrollPane(list); ... //Set up the area that reports focus-gained and focus-lost events. display = new JTextArea(); display.setEditable(false); //The method setRequestFocusEnabled prevents a //component from being clickable, but it can still //get the focus through the keyboard - this ensures //user accessibility. display.setRequestFocusEnabled(false); display.addFocusListener(this); JScrollPane displayScrollPane = new JScrollPane(display); ... } ... public void focusGained(FocusEvent e) { displayMessage("Focus gained", e); } public void focusLost(FocusEvent e) { displayMessage("Focus lost", e); } void displayMessage(String prefix, FocusEvent e) { display.append(prefix + (e.isTemporary() ? " (temporary):" : ":") + e.getComponent().getClass().getName() + "; Opposite component: " + (e.getOppositeComponent() != null ? e.getOppositeComponent().getClass().getName() : "null") + newline); } ... }
Соответствующий адаптер class FocusAdapter
.
Метод | Цель |
---|---|
|
Вызванный сразу после слушаемого компонент получает фокус. |
|
Вызванный сразу после слушаемого компонент теряет фокус. |
Метод | Цель |
---|---|
|
Возвращает истинное значение, если потерянное фокусом или полученное фокусом событие является временным. |
(в java.awt.event.ComponentEvent ) |
Возвращает компонент, который запустил событие фокуса. |
|
Возвращает другой компонент, включенный в изменение фокуса. Для a FOCUS_GAINED событие, это - компонент, который потерял фокус. Для a FOCUS_LOST событие, это - компонент, который получал фокус. Если изменение фокуса включает собственное приложение, приложение Java в различном VM или контексте, или никаком другом компоненте, то null возвращается. |
Следующая таблица приводит примеры тот фокус использования слушатели.
Пример | Где Описано | Примечания |
---|---|---|
FocusEventDemo |
Этот раздел | Отчеты все события фокуса, которые происходят на нескольких компонентах, чтобы демонстрировать обстоятельства, при которых запускаются события фокуса. |
TrackFocusDemo |
Как Использовать Подсистему Фокуса | Пользовательский компонент, Picture , реализует слушателя фокуса, чтобы потянуть красную границу вокруг компонента, когда это - текущий владелец фокуса. |