4

複数のテキスト ボックスの入力を検証しようとしています (つまり、数値である必要があります)。以下の便利なコード スニペットを見つけまし

ただし、3 つのテキスト ボックス ( textmoreTextおよび) がある場合、( ) コードを 3 回evenMoreText繰り返さずに、同じ機能を持つ検証リスナーをそれぞれに適用するにはどうすればよいでしょうか?.addVerifyListener(new VerifyListener() {...

switch ステートメントなど (どのテキスト ボックスに適用するかを決定するため) を実装したくありません。より一般的なものが必要です (将来、他のクラスで使用できるようにすることができます)。

text.addVerifyListener(new VerifyListener() {
  @Override
  public void verifyText(VerifyEvent e) {
    final String oldS = text.getText();
    final String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end);

    try {
      BigDecimal bd = new BigDecimal(newS);
      // value is decimal
      // Test value range
    } catch (final NumberFormatException numberFormatException) {
      // value is not decimal
      e.doit = false;
    }
  }
});
4

1 に答える 1

6

VerifyListenerを事前に定義し、Textから実際の値を取得しVerifyEventます。

VerifyListener listener = new VerifyListener()
{
    @Override
    public void verifyText(VerifyEvent e)
    {
        // Get the source widget
        Text source = (Text) e.getSource();

        // Get the text
        final String oldS = source.getText();
        final String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end);

        try
        {
            BigDecimal bd = new BigDecimal(newS);
            // value is decimal
            // Test value range
        }
        catch (final NumberFormatException numberFormatException)
        {
            // value is not decimal
            e.doit = false;
        }
    }
};

// Add listener to both texts
text.addVerifyListener(listener);
anotherText.addVerifyListener(listener);

他の場所でも使用する場合は、新しいクラスを作成します。

public class MyVerifyListener implements VerifyListener
{
    // The above code in here
}

そして、次を使用します。

MyVerifyListener listener = new MyVerifyListener();

text.addVerifyListener(listener);
anotherText.addVerifyListener(listener);
于 2012-12-20T13:29:15.763 に答える