You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现SWT Text控件仅允许输入数字且非数字字符完全不显示

问题描述

我想要实现SWT Text控件仅支持输入数字。我已知有现有方案可以实现类似效果,但该方案的表现不符合我的需求:输入非数字字符时,字符会先短暂出现在输入框中再消失,若快速输入123a,整段123a都会被移除。我希望非数字字符完全不会出现在输入框中,请问该需求是否可以实现?

解决方案

这个需求完全可以实现,核心是使用SWT原生提供的VerifyListener监听器,该监听器会在输入内容实际写入Text控件之前触发,提前拦截非法输入即可避免字符闪现、合法内容被连带删除的问题。

示例代码如下(仅支持正整数输入):

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.events.VerifyListener;

// 初始化Text控件
Text numberText = new Text(parentContainer, SWT.BORDER);

// 添加校验监听器
numberText.addVerifyListener(event -> {
    // 放行退格、删除、剪切等无新字符输入的操作
    if (event.text.isEmpty()) {
        return;
    }
    // 校验即将插入的所有字符是否都是数字,不符合则直接拦截
    event.doit = event.text.matches("[0-9]+");
});

如果需要适配更多输入场景,可以自行调整校验规则:

  • 支持负数:正则调整为[0-9\\-]+,同时额外限制减号仅能出现在文本首位
  • 支持小数:正则调整为[0-9\\.]+,同时新增逻辑判断当前Text控件中已存在的小数点数量,避免重复输入小数点
  • 支持自定义位数限制:可在校验逻辑中增加当前文本长度判断,超过指定长度直接拦截

内容的提问来源于stack exchange,提问作者adi.neag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:36:03