如何基于输入启用向导页面中的“下一步”按钮-SWT Java

如何基于输入启用向导页面中的“下一步”按钮-SWT Java,java,swt,jface,wizard,Java,Swt,Jface,Wizard,我有一个有两个向导页面的向导。 在第一页中,我有一个文本字段。 我想根据文本字段的输入启用向导页面中的“下一步”按钮。如果我们填充文本字段,“下一步”按钮应该被启用,如果它被删除,“下一步”按钮应该被动态禁用。这必须在运行时发生。 有人能帮我用“jface”怎么做吗。 在输入文本字段的输入时,向导页面的“下一步”按钮应该启用,而不仅仅是在文本字段的焦点上。调用向导页面设置页面完成方法来启用/禁用“下一步”按钮: Boolean enablenext; String name; text = ne

我有一个有两个向导页面的向导。 在第一页中,我有一个文本字段。 我想根据文本字段的输入启用向导页面中的“下一步”按钮。如果我们填充文本字段,“下一步”按钮应该被启用,如果它被删除,“下一步”按钮应该被动态禁用。这必须在运行时发生。 有人能帮我用“jface”怎么做吗。
在输入文本字段的输入时,向导页面的“下一步”按钮应该启用,而不仅仅是在文本字段的焦点上。

调用
向导页面
设置页面完成
方法来启用/禁用“下一步”按钮:

Boolean enablenext;
String name;
text = new Text(textbox1, SWT.SINGLE);

text.addListener(SWT.KeyDown, new Listener() {

        @Override
        public void handleEvent(Event event) {
            // TODO Auto-generated method stub

            enableNext = true;
            getWizard().getContainer().updateButtons();
            name = text.getText();

        }
    });
setPageComplete
将调用容器
updateButtons
方法,因此无需执行此操作

此时可以调用控件中的文本更改。对于文本控件,请使用
addModifyListener
监听对文本的更改,并根据需要调用
setPageComplete

setPageComplete(true or false);

您可以通过通知侦听器将按钮状态与输入字段的状态耦合:

text.addModifyListener(new ModifyListener()
  {
    @Override
    public void modifyText(ModifyEvent event)
    {
      // TODO get control text, save, and call setPageComplete
    }
  });
下面是整个示例代码:

textField.addModifyListener(e->buttonNext.setEnabled(textField.getText().length() > 0));

可能的复制力帮助我,它说的是当文本框聚焦时按钮的启用。但是当文本字段有输入时我需要它。它给了我这个错误,类型小部件中的addListener(int,Listener)方法不适用于参数(new Listener(){})-无法将Listener解析为类型只需将SWT.InFocus更改为SWT.KeyDown,这里是另一个例子,但我无法捕获我在文本中输入的完整数据field@greg-499:谢谢你的意见。我想这样。。。。打开向导后,如果文本字段中充满数据,则应启用“下一步”按钮;如果文本字段中没有任何内容,则应禁用“下一步”按钮。如果文本字段中没有预填充内容,则一旦用户输入,netx按钮应启用,并且用户输入的数据应捕获在字符串字段中,因此在适当的位置调用setPageComplete true/false。为answeri添加了modify listener的大纲在modifyText方法中添加了setPageComplete(true),但当我在文本字段中输入数据时,它并没有启用向导的“下一步”按钮,我一直使用类似的代码。向我们展示您正在尝试的代码。问题是关于JFace向导的-此代码与向导无关。
package dialog;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class CollobarationDialog extends Dialog {
    Text textField;
    Button buttonNext; 

  public CollobarationDialog(Shell parent) {
    super(parent);
  }

  public CollobarationDialog(Shell parent, int style) {
    super(parent, style);
  }


  private void openDialog() {
    Shell parent = getParent();
    final Shell shell =
      new Shell(parent, SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL);
    shell.setText("Collobaration Dialog");

    shell.setLayout(new GridLayout(3, true));

    textField = new Text(shell, SWT.SINGLE | SWT.BORDER);

    buttonNext = new Button(shell, SWT.PUSH);
    buttonNext.setText("Next");
    buttonNext.setEnabled(false);
    Button buttonCancel = new Button(shell, SWT.PUSH);
    buttonCancel.setText("Cancel");

    textField.addModifyListener(e->buttonNext.setEnabled(textField.getText().length() > 0)); 

    buttonCancel.addSelectionListener(new SelectionListener() {

        @Override
        public void widgetSelected(SelectionEvent arg0) {
             shell.dispose();

        }

        @Override
        public void widgetDefaultSelected(SelectionEvent arg0) {
            // Nothing to do

        }
    });

    shell.pack();
    shell.open();

    Display display = parent.getDisplay();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
  }

  public static void main(String[] args) {
    Shell shell = new Shell();
    CollobarationDialog dialog = new CollobarationDialog(shell);
    dialog.openDialog();        
  }
}