首页 > 解决方案 > 如何在 SWT 文本小部件中输入多个字符?

问题描述

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

此外,数字必须能够输入多个字符,并且必须允许使用 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 认为它是一种替代方法。总之,文本小部件似乎是最好的,我想用它来解决它。

谢谢你。

标签: textcharacterswtjface

解决方案


推荐阅读