java - 在 eclipse-rcp/swt 中创建多个相同的文本验证监听器

标签 java text swt eclipse-rcp validation

我正在尝试验证多个文本框的输入(即它们应该是一个数字),并在 here 下面找到了有用的代码片段.

但是,如果我有三个文本框(textmoreTextevenMoreText),我该如何应用具有相同的验证监听器每个功能,而不必重复 (.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;
    }
  }
});

最佳答案

预先定义VerifyListener 并从VerifyEvent 获取实际的Text:

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);

关于java - 在 eclipse-rcp/swt 中创建多个相同的文本验证监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973133/

相关文章:

javascript - Java - 在 browser.execute(script) 中使用方法

c++ - 致命字符串错误

java - 如何在 SWT/JFace 中设置双击编辑表格单元格?

java - 如何删除 SWT 按钮的边框,使其看起来像一个标签

使用 Apache Mina 的 Java socketserver - 如何设置线程?

java - 我怎样才能使 1/3 = 0.3 ? eclipse ,java

java - 如何延迟程序以便在文本之间有停顿?

r - 对齐绘图内的文本

java - 在java中 sleep

java - 包括 & 在我的组合框中