如何组合和验证swt对话框的两个文本字段?

时间:2014-03-07 09:16:28

标签: java button dialog swt listener

我有另一个问题。我在一个文本字段中使用ModifyListener来激活和取消激活swt对话框中的OK按钮。它很棒。

现在我想为另一个文本字段添加ModifyListener。我想只有在两个文本字段中只有一个字符时才激活OK按钮。

这是两个字段的代码:

descriptionText.addModifyListener(new ModifyListener(){

    public void modifyText(ModifyEvent e) {
        Text text = (Text) e.widget;

        if (text.getText().length() == 0) {

            getButton(IDialogConstants.OK_ID).setEnabled(false);
        }

        if (text.getText().length() >= 1) {

            getButton(IDialogConstants.OK_ID).setEnabled(true);
        }
    }
});

}

第二个字段:

ccidText.addModifyListener(new ModifyListener(){

        public void modifyText(ModifyEvent e) {
            Text text = (Text) e.widget;

            if (text.getText().length() == 0) {
        getButton(IDialogConstants.OK_ID).setEnabled(false);

            }
            if (text.getText().length() >= 1){              
                    getButton(IDialogConstants.OK_ID).setEnabled(true);
            }
        }
    });
}

我知道它不起作用,因为两个按钮之间没有依赖关系。 我该如何结合它?

我想将ok-button设置为false,同时两个modifylistener都会检测到char。 如果我删除一个测试字段中的所有字符,则必须再次停用该按钮。

谢谢你。

1 个答案:

答案 0 :(得分:4)

您可以对Listener个字段使用相同的Text,并将其添加到SWT.KeyUp

public static void main(String[] args)
{
    final Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout(SWT.VERTICAL));

    final Text first = new Text(shell, SWT.BORDER);
    final Text second = new Text(shell, SWT.BORDER);
    final Button button = new Button(shell, SWT.PUSH);
    button.setText("disabled");
    button.setEnabled(false);

    Listener listener = new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            String firstString = first.getText();
            String secondString = second.getText();

            button.setEnabled(!isEmpty(firstString) && !isEmpty(secondString));
            button.setText(button.isEnabled() ? "enabled" : "disabled");
        }
    };

    first.addListener(SWT.KeyUp, listener);
    second.addListener(SWT.KeyUp, listener);

    shell.pack();
    shell.setSize(300, shell.getSize().y);
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

private static boolean isEmpty(String input)
{
    if(input == null)
        return true;
    else
        return input.trim().isEmpty();
}

看起来像这样:

enter image description here enter image description here


代码基本上(在每个键击中)检查两个Text是否为空。如果是,请停用Button,否则启用它。