このドキュメントでは、新しいフォーカス・モデルに対応するためにAWTとSwingに加えられたAPI変更について概要を説明します。変更の概要については、まずここをお読みください。
既存のクラスへの変更:
新規クラス:
public void setSource(Object newSource)
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)
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)
次をjava.awt.Frame
のjavadocに追加:
/** * Frames are capable of generating the following types of WindowEvents: * WindowOpened, WindowClosing, WindowClosed, WindowIconified, * WindowDeiconified, WindowActivated, WindowDeactivated, WindowGainedFocus, * WindowLostFocus. */
次をjava.awt.Dialog
のjavadocに追加:
/** * 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()
次をjava.awt.event.WindowEvent
のjavadocに追加:
/** * 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)
このクラスは廃止されました。新しいアプリケーションは、java.awt.KeyboardFocusManager
のみ使用するようにしてください。ただし、独自のFocusManager
を定義する既存のアプリケーションのために(アプレットは除く)、下位互換性を保持しています。
Swing FocusManager
は、新しいAWT KeyboardFocusManager
のサブクラスに変更されました。FocusManager.setCurrentManager(FocusManager)
およびFocusManager.getCurrentManager()
は、それぞれKeyboardFocusManager.setCurrentKeyboardFocusManager(KeyboardFocusManager)
およびKeyboardFocusManager.getCurrentKeyboardFocusManager()
のラッパーに変更されました。
これにより、呼出し側スレッドにアクセス権"replaceKeyboardFocusManager"
が与えられない場合、KeyboardFocusManager.setCurrentKeyboardFocusManager(KeyboardFocusManager)
がSecurityException
をスローするため、これらの変更に関して多くの議論が起こりました。以前は、FocusManager.setCurrentManager(FocusManager)
はSecurityException
をスローしませんでした。複雑なクラス編成を設計することでこの問題を回避することはできましたが、提案された設計の美しさと単純さは下位互換性に関する小さな問題よりも重要であると考えました。
disableSwingFocusManager()
およびisFocusManagerEnabled()
は使用するべきではありません。Swing FocusManager
を無効にすることが、デフォルトのFocusTraversalPolicy
をSwingデフォルトのjavax.swing.LayoutFocusTraversalPolicy
からAWTデフォルトのjava.awt.DefaultFocusTraversalPolicy
に戻すセマンティックスを持つようになりました。
javax.swing.DefaultFocusManager
への変更
このクラスは廃止されました。新しいアプリケーションは、java.awt.KeyboardFocusManager
のみ使用するようにしてください。ただし、独自のDefaultFocusManager
を定義する既存のアプリケーションのために(アプレットは除く)、下位互換性を保持しています。
クライアント・コードがレガシーDefaultFocusManager
をインストールする場合、public以外のLegacyGlueFocusTraversalPolicy
をインストールすることで下位互換性を提供します(FocusTraversalPolicy
メソッド呼出しをDefaultFocusManager
上の対応するメソッドに経路指定します)。
isManagingFocus
: このメソッドは廃止されました。これによってJComponent
のフォーカス・トラバーサル・キーが、TABおよびSHIFT-TABからCTRL-TABおよびCTRL-SHIFT-TABに変更しました。また、フォーカス・トラバーサルが自動的にJComponent
に入らないようにJComponent
をマークしました。これはJComponent
をフォーカス・サイクル・ルートとしてマークすることと似ていますが、別のことです。その機能がFocusTraversalPolicy
クラス、Component
ごとのフォーカス・トラバーサル・キー、およびComponent
のフォーカス・トラバーサル・キーをまとめて無効にする機能に置き換えられました。
setNextFocusableComponent/getNextFocusableComponents
: これらのメソッドは廃止されました。FocusTraversalPolicies
が、フォーカス・トラバーサルのアルゴリズム表現を許可するため、信頼性が高くなっています。これらのメソッドは、アプリケーションがComponent
からComponent
へのフォーカス・トラバーサルをハードコードすることを強制します。
setRequestFocusEnabled/isRequestFocusEnabled
の仕様が変更され、requestFocusEnabled
プロパティは現在のLook & Feelのヒントになりました。
requestDefaultFocus
: このメソッドは廃止されました。その機能はFocusTraversalPolicy.getDefaultComponent(Container).requestFocus()
で置き換えられています。
javax.swing.JInternalFrame
への変更
getMostRecentFocusOwner
: java.awt.Window
と同様に、JInternalFrame
はjava.awt.KeyboardFocusManager
でフォーカス管理を集中化する前から getFocusOwner()
メソッドを残していました。APIを完全なものにし、Windowとの一貫性を保つために、Window
の対応するメソッドと同じ仕様のgetMostRecentFocusOwner()
がJInternalFrame
に追加されました。
setFocusCycleRoot/isFocusCycleRoot
: これらのメソッドは、JInternalFrames
にAWTの最上位Windows
と同様のセマンティックスを与えます。JInternalFrame
は常にフォーカス・サイクル・ルートである必要があるため、これらのメソッドはその制限を適用するようにオーバーライドされてfinal宣言されます。ただしAWT Window
とは異なり、JInternalFrame
はJDesktopPane
などのフォーカス・サイクル・ルート祖先を持つことができます。このため、Component.getFocusCycleRootAncestor()
はWindow
内のようにJInternalFrame
内でfinal宣言されません。
既存のKeyStroke
クラスはComponent
ごとのフォーカス・トラバーサル・キーAPIを設計するのに役立つため、このクラスは少量の変更でjava.awt.AWTKeyStroke
としてAWTに昇格されました。SwingクラスがAWTクラスのサブクラスになりました。
KeyStroke
、getKeyStroke(char, boolean)
内の非推奨のメソッドはAWTに昇格されませんでした。このため、このメソッドがAWTKeyStroke
標準キャッシュ・スキームに参加するための単純な方法はありません。このメソッドの仕様は、実装がこのメソッドから返されたインスタンスをキャッシュする必要がないことを特に説明するように、変更されました。
javax.swing.SwingUtilities
への変更
findFocusOwner:
このメソッドは廃止されました。その機能はKeyboardFocusManager.getFocusOwner()
で置き換えられています。