我想使用SWT设计一个密码对话框,我可以使用下面的代码实现这一点,但我也希望这两个字段都是强制性的,我无法理解如何在下面的代码中包含此功能。请帮帮我。
import org.eclipse.jface.dialogs.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class PasswordDialog extends Dialog {
private Text txtUser;
private Text txtPassword;
private String user = "";
private String password = "";
public PasswordDialog(Shell parentShell) {
super(parentShell);
}
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
GridLayout layout = new GridLayout(2, false);
layout.marginRight = 5;
layout.marginLeft = 10;
container.setLayout(layout);
Label lblUser = new Label(container, SWT.NONE);
lblUser.setText("User:");
txtUser = new Text(container, SWT.BORDER);
txtUser.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
txtUser.setText(user);
txtUser.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
Text textWidget = (Text) e.getSource();
String userText = textWidget.getText();
user = userText;
}
});
Label lblPassword = new Label(container, SWT.NONE);
GridData gd_lblNewLabel = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_lblNewLabel.horizontalIndent = 1;
lblPassword.setLayoutData(gd_lblNewLabel);
lblPassword.setText("Password:");
txtPassword = new Text(container, SWT.BORDER| SWT.PASSWORD);
txtPassword.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
txtPassword.setText(password);
txtPassword.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
Text textWidget = (Text) e.getSource();
String passwordText = textWidget.getText();
password = passwordText;
}
});
return container;
}
// override method to use "Login" as label for the OK button
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, "Login", true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
@Override
protected Point getInitialSize() {
return new Point(450, 300);
}
@Override
protected void okPressed() {
user = txtUser.getText();
password = txtPassword.getText();
super.okPressed();
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
答案 0 :(得分:0)
在modifyText
侦听器中,您可以启用/禁用“确定”按钮。使用类似的东西:
void updateOKStatus(boolean enable)
{
Button ok = getButton(IDialogConstants.OK_ID);
if (ok != null)
ok.setEnabled(enable);
}