特定の文字のみを受付けるテキストフィールド
Textウィジェットで特定の文字のみを受付けるようにするには、TextクラスにVerifyListenerを追加します。Textウィジェット上でキーがタイプされ、Textの内容が修正される直前にVerifyListenerのverifyTextメソッドが呼ばれます。このメソッドをオーバーライドして特定の文字しか受付けないように記述すればいいわけです。VerifyEventのdoitフィールドにfalseを代入することで、そのときタイプしたキーはTextウィジェットに入力されません。
Text text = new Text(...);
text.addVerifyListener(new VerifyListener(){
public void verifyText(VerifyEvent e){
//受付けない文字がタイプされたら e.doit = falseを実行
}
});
スクリーンショット
ソースコード (RestrictedTextTest.java)
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.*;
public class RestrictedTextTest {
public static String acceptableChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
public static void main(String[] args) {
new RestrictedTextTest();
}
public RestrictedTextTest() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("RestrictedTextTest");
shell.setLayout(new GridLayout(1, false));
Text text = new Text(shell, SWT.SINGLE | SWT.BORDER);
GridData gd = new GridData();
gd.widthHint = 200;
text.setLayoutData(gd);
text.addVerifyListener(new VerifyListener(){
//Enterを押したときには、このメソッドは呼び出されない
public void verifyText(VerifyEvent e) {
//BackspaceやDeleteが押されたときは、有効にする
if (e.character == SWT.BS || e.character == SWT.DEL){
return;
}
//大文字以外のアルファベットは無効にする
if (acceptableChar.indexOf(Character.toString(e.character)) == -1){
e.doit = false;
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
|