UI を作成していると、入力欄にフォーカスが当たった時に、IME の入力モードをオフ(半角英数字入力)に切り替えたい時などがあります。 ただし IME の制御は Windows API 等を使わなければず、 Java からの制御は難しいのかな…と思っていたら、さすがに SWT では簡単にできるようです。
ただし、出来る範囲は限られているように思います。下記にサンプルと検証結果を示します。
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class IMESample {
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("IME Sample");
GridLayout layout = new GridLayout(2, false);
shell.setLayout(layout);
create(shell, SWT.NONE);
create(shell, SWT.ROMAN);
create(shell, SWT.DBCS);
create(shell, SWT.PHONETIC);
create(shell, SWT.NATIVE);
create(shell, SWT.ALPHA);
shell.setSize(400,240);
shell.open();
while (!shell.isDisposed()){
if (!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
}
private static void create(final Shell shell, final int style) {
Label label = new Label(shell, SWT.LEFT);
switch(style) {
case SWT.NONE : label.setText("SWT.NONE"); break;
case SWT.ROMAN : label.setText("SWT.ROMAN"); break;
case SWT.DBCS : label.setText("SWT.DBCS"); break;
case SWT.PHONETIC : label.setText("SWT.PHONETIC"); break;
case SWT.NATIVE : label.setText("SWT.NATIVE"); break;
case SWT.ALPHA : label.setText("SWT.ALPHA"); break;
default : break;
}
Text text = new Text(shell, SWT.SINGLE|SWT.BORDER);
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
text.setLayoutData(data);
text.addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e) {
shell.setImeInputMode(style);
}
});
}
}
実行画面※ SWT.ALPHA では半角英数字入力だが、 IME が on なので確定候補が表示される(画面はATOK16での入力例)。
検証結果
確認した環境は
- Windows 2000
- JDK 1.3.1_04 (SunMicrosystems)
です。
指定したスタイルビット | SWT 2.1.3 (ATOK16) | SWT 3.0 M8 (ATOK16) |
---|---|---|
SWT.NONE | IME 入力オフ | IME 入力オフ |
SWT.ROMAN | IME 入力オフ | IME 入力オフ |
SWT.DBC | 全角アルファベット入力 | 全角アルファベット入力 |
SWT.PHONETIC | 半角カタカナ入力 (キーは50音入力) |
半角カタカナ入力 (キーは50音入力) |
SWT.NATIVE | 全角ひらがな入力 (キーは50音入力) |
全角ひらがな入力 (キーは50音入力) |
SWT.ALPHA | 半角アルファベット入力 | 半角アルファベット入力 |
指定したスタイルビット | SWT 2.1.3 (MS-IME2000) | SWT 3.0 M8 (MS-IME2000) |
---|---|---|
SWT.NONE | IME 入力オフ | IME 入力オフ |
SWT.ROMAN | IME 入力オフ | IME 入力オフ |
SWT.DBC | 全角アルファベット入力 | 全角アルファベット入力 |
SWT.PHONETIC | 半角カタカナ入力 (キーはローマ字入力) |
半角カタカナ入力 (キーはローマ字入力) |
SWT.NATIVE | 半角カタカナ入力 (キーはローマ字入力) |
半角カタカナ入力 (キーはローマ字入力) |
SWT.ALPHA | 半角アルファベット入力 | 半角アルファベット入力 |