Mega Code Archive

 
Categories / Java Tutorial / Internationalization
 

Implements InputMethod

import java.awt.AWTEvent; import java.awt.Color; import java.awt.Dimension; import java.awt.Image; import java.awt.Label; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.Window; import java.awt.event.InputMethodEvent; import java.awt.event.KeyEvent; import java.awt.im.spi.InputMethod; import java.awt.im.spi.InputMethodContext; import java.awt.im.spi.InputMethodDescriptor; import java.text.AttributedString; import java.util.Locale; public class SimpleInputMethod implements InputMethod {   private static Window statusWindow;   private InputMethodContext inputMethodContext;   private Locale locale;   public SimpleInputMethod() {     locale = new Locale("iw", "IL");   }   public void activate() {     if (!statusWindow.isVisible()) {       statusWindow.setVisible(true);     }   }   public void deactivate(boolean isTemporary) {   }   public void dispatchEvent(AWTEvent event) {     if (event.getID() == KeyEvent.KEY_TYPED) {       KeyEvent e = (KeyEvent) event;       if (handleCharacter(e.getKeyChar())) {         e.consume();       }     }   }   public void dispose() {   }   public void endComposition() {   }   public Object getControlObject() {     return null;   }   public Locale getLocale() {     return locale;   }   public void hideWindows() {     statusWindow.setVisible(false);   }   public boolean isCompositionEnabled() {     return true;   }   public void removeNotify() {   }   public void setCharacterSubsets(Character.Subset[] subsets) {   }   public void setCompositionEnabled(boolean enable) {     throw new UnsupportedOperationException();   }   public void notifyClientWindowChange(Rectangle location) {   }   public void reconvert() {     throw new UnsupportedOperationException();   }   public void setInputMethodContext(InputMethodContext context) {     inputMethodContext = context;     if (statusWindow == null) {       statusWindow = context.createInputMethodWindow("Simple Input Method", false);       Label label = new Label();       label.setText(locale.getDisplayName());       statusWindow.add(label);       label.setSize(200, 50);       statusWindow.add(label);       statusWindow.pack();       Dimension d = Toolkit.getDefaultToolkit().getScreenSize();       statusWindow.setLocation(d.width - statusWindow.getWidth(), d.height           - statusWindow.getHeight());     }   }   public boolean setLocale(Locale locale) {     return (locale.equals(this.locale));   }   private boolean handleCharacter(char ch) {     switch (ch) {     case 'a':       write('\u05D0');        return true;     case 'b':       write('\u05D1');        return true;     }     return false;   }   private void write(char ch) {     AttributedString as = new AttributedString(String.valueOf(ch));     inputMethodContext.dispatchInputMethodEvent(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED, as         .getIterator(), 1, null, null);   } } class SimpleInputMethodDescriptor implements InputMethodDescriptor {   private static Locale HEBREW = new Locale("iw", "IL");   public SimpleInputMethodDescriptor() {   }   public InputMethod createInputMethod() throws Exception {     return new SimpleInputMethod();   }   public Locale[] getAvailableLocales() {     Locale[] locales = { HEBREW };     return locales;   }   public boolean hasDynamicLocaleList() {     return false;   }   public String getInputMethodDisplayName(Locale inputLocale, Locale displayLanguage) {     return "Hebrew Input Method";   }   public Image getInputMethodIcon(Locale inputLocale) {     return null;   } }