Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Изменения API фокуса

Этот документ обрисовывает в общих чертах изменения API, которые были сделаны к AWT и Swing, чтобы разместить новую модель фокуса. Для общего обзора изменений можно хотеть сначала считать это.

Модификации к существующим классам:

Новые классы:

Добавьте следующий к java.awt.AWTEvent:

    public void setSource(Object newSource)

Изменения к java.awt.Component:

    public boolean isFocusTraversable()

    public boolean isFocusable()

    public void setFocusable(boolean focusable)

    public void setFocusTraversalKeys(int id, Set keystroke)

    public Set getFocusTraversalKeys(int id)

    public void setFocusTraversalKeysEnabled(boolean focusTraversalKeysEnabled)

    public boolean getFocusTraversalKeysEnabled()

    public void requestFocus()

    protected boolean requestFocus(boolean temporary)

    public boolean requestFocusInWindow()

    protected boolean requestFocusInWindow(boolean temporary)

    public void transferFocus()

    public void transferFocusBackward()

    public void transferFocusUpCycle()

    public Container getFocusCycleRootAncestor()

    public boolean isFocusCycleRoot(Container container)

    public boolean hasFocus()

    public boolean isFocusOwner()

    public void addPropertyChangeListener(PropertyChangeListener listener)

    public void removePropertyChangeListener(PropertyChangeListener listener)

    public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)

    public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)

    public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue)

    public void firePropertyChange(String propertyName, int oldValue, int newValue)

    public boolean isFontSet()

    public boolean isBackgroundSet()

    public boolean isForegroundSet()
  
    public boolean isCursorSet()

    public boolean areFocusTraversalKeysSet(int id)
    

Изменения к java.awt.Container:

    public void setFocusTraversalKeys(int id, Set keystroke)

    public Set getFocusTraversalKeys(int id)

    public void setFocusTraversalPolicy(FocusTraversalPolicy policy)

    public FocusTraversalPolicy getFocusTraversalPolicy()

    public void setFocusCycleRoot(boolean focusCycleRoot)

    public boolean isFocusCycleRoot()

    public boolean isFocusCycleRoot(Container container)

    public void transferFocusDownCycle()

    public void addPropertyChangeListener(PropertyChangeListener listener)

    public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)

    public boolean areFocusTraversalKeysSet(int id)

    public boolean isFocusTraversalPolicySet()

Изменения к java.awt.Window:

    public void toFront()

    public void toBack()

    public Component getFocusOwner()

    public Component getMostRecentFocusOwner()

    public boolean isActive()

    public boolean isFocused()

    public final void setFocusCycleRoot(boolean focusCycleRoot)

    public final boolean isFocusCycleRoot()

    public final Container getFocusCycleRootAncestor()

    public boolean isFocusableWindow()

    public void setFocusableWindowState(boolean focusableWindowState)

    public void addPropertyChangeListener(PropertyChangeListener listener)

    public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)

Добавьте следующий к javadoc java.awt.Frame:

/**
 * Frames are capable of generating the following types of WindowEvents:
 * WindowOpened, WindowClosing, WindowClosed, WindowIconified,
 * WindowDeiconified, WindowActivated, WindowDeactivated, WindowGainedFocus,
 * WindowLostFocus.
 */

Добавьте следующий к javadoc java.awt.Dialog:

/**
 * Dialogs are capable of generating the following WindowEvents:
 * WindowOpened, WindowClosing, WindowClosed, WindowActivated,
 * WindowDeactivated, WindowGainedFocus, WindowLostFocus.
 */

Добавьте следующий к java.awt.event.FocusEvent:

    public FocusEvent(Component source, int id, boolean temporary, Component opposite)

    public Component getOppositeComponent()

Добавьте следующий к javadoc java.awt.event.WindowEvent:

/**
 * A low-level event that indicates that a window has changed its status. This
 * low-level event is generated by a Window object when it is opened, closed,
 * activated, deactivated, iconified, or deiconified, or when focus is
 * transfered into or out of the Window.
 */

Добавьте следующий к java.awt.event.WindowEvent:

    public static final int WINDOW_ACTIVATED

    public static final int WINDOW_DEACTIVATED

    public static final int WINDOW_GAINED_FOCUS

    public static final int WINDOW_LOST_FOCUS

    public WindowEvent(Window source, int id, Window opposite) 

    public Window getOppositeWindow()

Добавьте следующий к java.awt.event. WindowListener:

    public void windowActivated(WindowEvent e)

    public void windowDeactivated(WindowEvent e)

Добавьте следующий к java.awt.event.WindowAdapter:

    public void windowGainedFocus(WindowEvent e)

    public void windowLostFocus(WindowEvent e)

Добавьте следующий к java.awt.AWTEventMulticaster:

    public void windowGainedFocus(WindowEvent e)

    public void windowLostFocus(WindowEvent e)

Модификации к javax.swing.FocusManager

Этот class был obsoleted. Новые приложения должны использовать java.awt.KeyboardFocusManager исключительно. Однако, мы сохранили обратную совместимость для существующих приложений (но не апплеты), которые определяют их собственное FocusManager.

Swing FocusManager был изменен, чтобы быть подклассом нового, AWT KeyboardFocusManager. FocusManager.setCurrentManager(FocusManager) и FocusManager.getCurrentManager() были изменены на обертки вокруг KeyboardFocusManager.setCurrentKeyboardFocusManager(KeyboardFocusManager) и KeyboardFocusManager.getCurrentKeyboardFocusManager(), соответственно.

Было большое обсуждение этих изменений потому что KeyboardFocusManager.setCurrentKeyboardFocusManager(KeyboardFocusManager) бросит a SecurityException если вызывающий поток не предоставили "replaceKeyboardFocusManager" разрешение. Ранее, FocusManager.setCurrentManager(FocusManager) никогда не бросал бы a SecurityException. Хотя мы смогли разработать замысловатую организацию class, которая избегала этой проблемы, мы чувствовали что элегантность и простота предложенного проекта, перевешиваемого довольно небольшое беспокойство обратной совместимости.

disableSwingFocusManager() и isFocusManagerEnabled() не должен использоваться. Отключение Swing FocusManager теперь имеет семантику возвращения значения по умолчанию FocusTraversalPolicy от значения по умолчанию Swing javax.swing.LayoutFocusTraversalPolicy к значению по умолчанию AWT java.awt.DefaultFocusTraversalPolicy.

Модификации к javax.swing.DefaultFocusManager

Этот class был obsoleted. Новые приложения должны использовать java.awt.KeyboardFocusManager исключительно. Однако, мы сохранили обратную совместимость для существующих приложений (но не апплеты), которые определяют их собственное DefaultFocusManager.

Если клиентский код устанавливает наследство DefaultFocusManager, мы обеспечиваем обратную совместимость, устанавливая непубличное LegacyGlueFocusTraversalPolicy который направляет FocusTraversalPolicy вызовы метода к соответствующим методам на DefaultFocusManager.

Модификации к javax.swing.JComponent

isManagingFocus: Этот метод был obsoleted. Это изменило a JComponent's фокусируют ключи обхода от ВКЛАДКИ и SHIFT-TAB к CTRL-TAB и CTRL-SHIFT-TAB. Это также отметило JComponent таким способом, которые фокусируют обход, автоматически не вошел бы JComponent. Это было подобно, но отличалось от, отмечая a JComponent как корень цикла фокуса. Его функциональность заменяется FocusTraversalPolicy class, на -Component ключи обхода фокуса, и возможность отключить a Component's фокусируют ключи обхода в массе.

setNextFocusableComponent/getNextFocusableComponents: Эти методы были obsoleted FocusTraversalPolicies более надежны, потому что они позволяют алгоритмическое выражение обхода фокуса. Эти методы вызывают приложения к обходу фокуса твердого кода Component Component.

Спецификация для setRequestFocusEnabled/isRequestFocusEnabled изменился, так, что requestFocusEnabled свойство является теперь подсказкой к текущему стили.

requestDefaultFocus: Этот метод был obsoleted. Его функциональность заменяется FocusTraversalPolicy.getDefaultComponent(Container).requestFocus().

Модификации к javax.swing.JInternalFrame

getMostRecentFocusOwner: Как java.awt.Window, JInternalFrame имеет a getFocusOwner() метод, перенесенный до централизации управления фокусом в java.awt.KeyboardFocusManager. Закруглить API, и остаться непротиворечивым с Окном, getMostRecentFocusOwner() был добавлен к JInternalFrame с той же самой спецификацией как соответствующий метод на Window.

setFocusCycleRoot/isFocusCycleRoot: Эти методы дают JInternalFrames подобная семантика к верхнему уровню Windows в AWT. С тех пор a JInternalFrame должен всегда быть корень цикла фокуса, эти методы переопределяются и объявили, что финал осуществил то ограничение. Однако, в отличие от AWT Window, a JInternalFrame может иметь корневого циклом фокусом предка, такого как a JDesktopPane. Таким образом, Component.getFocusCycleRootAncestor() не объявляется финалом в JInternalFrame поскольку это находится в Window.

Модификации к javax.swing.KeyStroke

Поскольку существующее KeyStroke class был полезен для разработки на -Component ключевые API обхода фокуса, этот class был продвинут с незначительными модификациями на AWT как java.awt.AWTKeyStroke. Swing class является теперь подклассом class AWT.

Тот осуждаемый метод в KeyStroke, getKeyStroke(char, boolean), не был продвинут на AWT. Из-за этого нет никакого простого пути к этому методу, чтобы участвовать в стандарте AWTKeyStroke кэширование схемы. Спецификация этого метода была изменена, чтобы отметить, что реализации не должны кэшировать экземпляры, возвращенные этим методом.

Модификации к javax.swing.SwingUtilities

findFocusOwner: Этот метод был obsoleted. Его функциональность заменяется KeyboardFocusManager.getFocusOwner().


Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами