如何在 SWT 文本小部件中输入多个字符?

问题描述

我只想在 SWT 文本小部件中输入数字。 .

另外,数字必须能够输入多个字符,并且必须允许使用BACKSPACE、DELETE等键。

我编写了以下代码来满足这些条件。

(所有代码都使用一种名为 Xtend 的语言,与 Java 没有太大区别。)

在下面的代码中,BACKSPACE 不起作用。

new Text(parent,SWT.BORDER) => [
    layoutData = new GridData(GridData.FILL_HORIZONTAL)
        
    addListener(SWT.Verify,new Listener() {
        override handleEvent(Event e) {
            var Text sourceText = e.widget as Text
            val oldText = sourceText.getText();
            val newText = oldText.substring(0,e.start) + e.text
            oldText.substring(e.end)
            System.out.println(oldText + " -> " + newText);
            wizard.request.startRowIndex = Integer.parseInt(newText)
            validate();
        }
    })
]

当输入的字符被放入模型时,下面的代码只包含最后一个文字符。 (ModelObject 是我写的一个 int 模型。)

new Text(parent,SWT.BORDER) => [
layoutData = new GridData(GridData.FILL_HORIZONTAL)

addListener(makeFlag(SWT.FocusOut,SWT.Verify),new Listener() {
    override handleEvent(Event event) {
        event.doit = switch event.character {
            case Character.isDigit(event.character),case BACKSPACE,case DELETE: {
                ModelObject = Character.getNumericValue(event.character)
                validate()
                true
            }
            default: {
                false;
            }
        }
    }
})

我不想使用 StyledText,Spinner 将其视为替代方案。总之,Text widget似乎是最好的,我想用它来解决它。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)