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

Text 如何在SWT文本小部件中输入多个字符?,text,character,swt,jface,Text,Character,Swt,Jface,我只想在SWT文本小部件中输入数字。 此外,数字必须能够输入多个字符,并且必须允许退格、删除键等 为了满足这些条件,我编写了以下代码 (所有代码都使用一种称为Xtend的语言,与Java没有太大区别。) 在下面的代码中,退格不起作用 new Text(parent, SWT.BORDER) => [ layoutData = new GridData(GridData.FILL_HORIZONTAL) addListener(SWT.Verify, ne

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

此外,数字必须能够输入多个字符,并且必须允许退格、删除键等

为了满足这些条件,我编写了以下代码

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

在下面的代码中,退格不起作用

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模型。)

我不想使用StyledText,Spinner认为它是一种替代方法。总之,文本小部件似乎是最好的,我想用它来解决这个问题

谢谢。

SWT代码片段显示验证侦听器只允许数字(以及退格、删除)
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;
            }
        }
    }
})