如何启用向导页面中基于输入的下一步按钮- SWT Java
How to enable Next button in the wizardpage based on input- SWT Java
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();
}
});
我有一个包含 2 个向导页面的向导。
在第一页中,我有一个文本字段。
我想根据文本字段的输入在向导页面中启用下一步按钮。如果我们填充文本字段 'Next' 按钮应该被启用,如果它被删除 'Next' 按钮应该被动态禁用。这必须在运行时发生。
有人可以帮助我如何使用 'jface' 来做到这一点。
向导页面的“下一步”按钮应该在输入文本字段时启用,而不仅仅是文本字段的焦点。
调用WizardPage
setPageComplete
方法启用/禁用下一个按钮:
setPageComplete(true or false);
setPageComplete
将调用容器 updateButtons
方法,因此无需执行此操作。
此时可以调用控件中的文本更改。对于文本控件,使用 addModifyListener
来监听文本的变化并在适当时调用 setPageComplete
。
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));
这里是整个示例代码:
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();
}
}
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();
}
});
我有一个包含 2 个向导页面的向导。 在第一页中,我有一个文本字段。 我想根据文本字段的输入在向导页面中启用下一步按钮。如果我们填充文本字段 'Next' 按钮应该被启用,如果它被删除 'Next' 按钮应该被动态禁用。这必须在运行时发生。 有人可以帮助我如何使用 'jface' 来做到这一点。 向导页面的“下一步”按钮应该在输入文本字段时启用,而不仅仅是文本字段的焦点。
调用WizardPage
setPageComplete
方法启用/禁用下一个按钮:
setPageComplete(true or false);
setPageComplete
将调用容器 updateButtons
方法,因此无需执行此操作。
此时可以调用控件中的文本更改。对于文本控件,使用 addModifyListener
来监听文本的变化并在适当时调用 setPageComplete
。
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));
这里是整个示例代码:
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();
}
}