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

标签 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);
            }
        }
    });
}

我知道它不起作用,因为两个按钮之间没有依赖关系。 我怎样才能结合它?

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

谢谢你。

最佳答案

您可以对两个 Text 字段使用相同的 Listener 并将其添加到 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,否则启用它。

关于java - 如何合并和验证 swt 对话框的两个文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22245937/

相关文章:

java - 如何配置 log4j 以仅记录信息消息和更高级别的消息?

java - 使用正则表达式,java从电话号码中删除可选的零

java - 通过小部件中的按钮触发事件

android - 无法在自定义对话框中检索 EditText

angular - 如何从 angular-material2 对话框与其父级进行通信

java - GWT CellTable CheckboxCell 在 IE8 中不起作用

Java/JSP WEB-INF/类无法导入

Android - 将我的应用程序按钮添加到锁定屏幕?

java - 按下按钮后获取图像对应的文件名

flutter - 在 AlertDialog 中获取复选框