Spec-Zone .ru
спецификации, руководства, описания, 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()
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
Этот класс был 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
. Хотя мы смогли разработать замысловатую организацию класса, которая избегала этой проблемы, мы чувствовали что элегантность и простота предложенного проекта, перевешиваемого довольно небольшое беспокойство обратной совместимости.
disableSwingFocusManager()
и isFocusManagerEnabled()
не должен использоваться. Отключение Swing FocusManager
теперь имеет семантику возвращения значения по умолчанию FocusTraversalPolicy
от значения по умолчанию Swing javax.swing.LayoutFocusTraversalPolicy
к значению по умолчанию AWT java.awt.DefaultFocusTraversalPolicy
.
Модификации к javax.swing.DefaultFocusManager
Этот класс был 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
класс, на -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
класс был полезен для разработки на -Component
ключевые API обхода фокуса, этот класс был продвинут с незначительными модификациями на AWT как java.awt.AWTKeyStroke
. Класс Swing является теперь подклассом класса AWT.
Тот осуждаемый метод в KeyStroke
, getKeyStroke(char, boolean)
, не был продвинут на AWT. Из-за этого нет никакого простого пути к этому методу, чтобы участвовать в стандарте AWTKeyStroke
кэширование схемы. Спецификация этого метода была изменена, чтобы отметить, что реализации не должны кэшировать экземпляры, возвращенные этим методом.
Модификации к javax.swing.SwingUtilities
findFocusOwner:
Этот метод был obsoleted. Его функциональность заменяется
KeyboardFocusManager.getFocusOwner()
.