当前位置: 首页 > 面试题库 >

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

朱雅惠
2023-03-14
问题内容

我试图验证的多个文本框输入(即它们应该是一个数字),发现下面的有用的代码片断在这里。

但是,如果我有三个文本框(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事先并获得实际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);


 类似资料:
  • 我有一个用例,我想在一个应用程序中创建多个监听器(6)。我想订阅多个目的地(6个主题)。所有订阅都是持久的。我为每个监听器使用单独的默认消息监听器容器(DMLC),并使用不同的客户端id,但我对如何使用连接工厂感到困惑。 我是否应该使用单个 ActiveMQ 池连接工厂,最大连接数指定为 6。或者我应该为每个侦听器使用不同的池连接工厂吗? 使用具有最大连接池连接工厂对于持久用户有什么危害吗? 源代

  • 服务器部件: 客户部分:io.js 消息组件 信息形式——发布过程的开始

  • 我能否向社区咨询一下,听多个主题的最佳方式是什么,每个主题都包含一个不同类别的信息? 在过去的几天里,我一直在玩Spring Kafka。到目前为止我的思考过程:

  • 我想知道如何在一个键事件中按下所有的键。例如,我想为Ctrl+F编写一个监听器,它可以切换全屏。如何检查在一个事件中是否同时按下了Ctrl和F?

  • 因此,我有一个包含许多的表单,它们都需要填写。我研究了文本框验证,但我只能找到验证单个文本框的说明。下面是单数文本框验证的代码。我只是想知道是否有可能同时打击所有的人,而不是每个人都这样。任何帮助都将不胜感激!

  • 我有两个监听器,在将事件发布到eventbus时接受相同的参数。但即使接受相同的论点,这些听众的行为也不同。 用户按下执行按钮并想要触发,例如取消作业。 对于执行作业 用于取消作业 我的问题是,在将事件发布到eventbus时,如何触发特定的侦听器,或者它将调用这两个侦听器?