/* * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package java.awt.im.spi; import java.util.Locale; import java.awt.AWTEvent; import java.awt.Rectangle; import java.lang.Character.Subset; /** * Defines the interface for an input method that supports complex text input. * Input methods traditionally support text input for languages that have * more characters than can be represented on a standard-size keyboard, * such as Chinese, Japanese, and Korean. However, they may also be used to * support phonetic text input for English or character reordering for Thai. *
* Subclasses of InputMethod can be loaded by the input method framework; they * can then be selected either through the API * ({@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}) * or the user interface (the input method selection menu). * * @since 1.3 * * @author JavaSoft International */ public interface InputMethod { /** * Sets the input method context, which is used to dispatch input method * events to the client component and to request information from * the client component. *
* This method is called once immediately after instantiating this input
* method.
*
* @param context the input method context for this input method
* @exception NullPointerException if context
is null
*/
public void setInputMethodContext(InputMethodContext context);
/**
* Attempts to set the input locale. If the input method supports the
* desired locale, it changes its behavior to support input for the locale
* and returns true.
* Otherwise, it returns false and does not change its behavior.
*
* This method is called *
locale
is null
*/
public boolean setLocale(Locale locale);
/**
* Returns the current input locale. Might return null in exceptional cases.
* * This method is called *
* This method is called *
enable
.
* * An input method that is enabled for composition interprets incoming * events for both composition and control purposes, while a * disabled input method does not interpret events for composition. * Note however that events are passed on to the input method regardless * whether it is enabled or not, and that an input method that is disabled * for composition may still interpret events for control purposes, * including to enable or disable itself for composition. *
* For input methods provided by host operating systems, it is not always possible to * determine whether this operation is supported. For example, an input method may enable * composition only for some locales, and do nothing for other locales. For such input * methods, it is possible that this method does not throw * {@link java.lang.UnsupportedOperationException UnsupportedOperationException}, * but also does not affect whether composition is enabled. *
* This method is called *
* This method is called *
true
if this input method is enabled for
* composition; false
otherwise.
* @throws UnsupportedOperationException if this input method does not
* support checking whether it is enabled for composition
* @see #setCompositionEnabled
*/
public boolean isCompositionEnabled();
/**
* Starts the reconversion operation. The input method obtains the
* text to be reconverted from the current client component using the
* {@link java.awt.im.InputMethodRequests#getSelectedText InputMethodRequests.getSelectedText}
* method. It can use other InputMethodRequests
* methods to request additional information required for the
* reconversion operation. The composed and committed text
* produced by the operation is sent to the client component as a
* sequence of InputMethodEvent
s. If the given text
* cannot be reconverted, the same text should be sent to the
* client component as committed text.
*
* This method is called by
* {@link java.awt.im.InputContext#reconvert() InputContext.reconvert}.
*
* @throws UnsupportedOperationException if the input method does not
* support the reconversion operation.
*/
public void reconvert();
/**
* Dispatches the event to the input method. If input method support is
* enabled for the focussed component, incoming events of certain types
* are dispatched to the current input method for this component before
* they are dispatched to the component's methods or event listeners.
* The input method decides whether it needs to handle the event. If it
* does, it also calls the event's consume
method; this
* causes the event to not get dispatched to the component's event
* processing methods or event listeners.
*
* Events are dispatched if they are instances of InputEvent or its * subclasses. * This includes instances of the AWT classes KeyEvent and MouseEvent. *
* This method is called by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}.
*
* @param event the event being dispatched to the input method
* @exception NullPointerException if event
is null
*/
public void dispatchEvent(AWTEvent event);
/**
* Notifies this input method of changes in the client window
* location or state. This method is called while this input
* method is the current input method of its input context and
* notifications for it are enabled (see {@link
* InputMethodContext#enableClientWindowNotification
* InputMethodContext.enableClientWindowNotification}). Calls
* to this method are temporarily suspended if the input context's
* {@link java.awt.im.InputContext#removeNotify removeNotify}
* method is called, and resume when the input method is activated
* for a new client component. It is called in the following
* situations:
*
enableClientWindowNotification(inputMethod,
* true)
if the current client component exists,enableClientWindowNotification(inputMethod,
* true)
if during the call no current client component was
* available,* If an input method provides its own windows, it should make sure * at this point that all necessary windows are open and visible. *
* This method is called *
* If an input method provides its own windows, only windows that relate * to the current composition (such as a lookup choice window) should be * closed at this point. * It is possible that the input method will be immediately activated again * for a different client component, and closing and reopening more * persistent windows (such as a control panel) would create unnecessary * screen flicker. * Before an instance of a different input method class is activated, * {@link #hideWindows} is called on the current input method. *
* This method is called *
* This method is called *
* This method is called by {@link java.awt.im.InputContext#removeNotify InputContext.removeNotify}. *
* The method is only called when the input method is inactive. */ public void removeNotify(); /** * Ends any input composition that may currently be going on in this * context. Depending on the platform and possibly user preferences, * this may commit or delete uncommitted text. Any changes to the text * are communicated to the active component using an input method event. * *
* A text editing component may call this in a variety of situations, * for example, when the user moves the insertion point within the text * (but outside the composed text), or when the component's text is * saved to a file or copied to the clipboard. *
* This method is called *
* This method is called by {@link java.awt.im.InputContext#dispose InputContext.dispose}. *
* The method is only called when the input method is inactive. * No method of this interface is called on this instance after dispose. */ public void dispose(); /** * Returns a control object from this input method, or null. A * control object provides methods that control the behavior of the * input method or obtain information from the input method. The type * of the object is an input method specific class. Clients have to * compare the result against known input method control object * classes and cast to the appropriate class to invoke the methods * provided. *
* This method is called by * {@link java.awt.im.InputContext#getInputMethodControlObject InputContext.getInputMethodControlObject}. * * @return a control object from this input method, or null */ public Object getControlObject(); }