JAVA GUI -我的提交按钮在点击时没有响应



我正在尝试创建一个登录GUI,当我按下提交按钮时,什么都没有发生。其他两个按钮按预期工作。我试图添加一个JOptionPane,但这似乎什么也不做。有人有什么建议吗?

/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setBackground(SWTResourceManager.getColor(SWT.COLOR_TITLE_BACKGROUND_GRADIENT));
shell.setSize(450, 300);
shell.setText("Homework 1 GUI");

CLabel lblHomework1Login = new CLabel(shell, SWT.NONE);
lblHomework1Login.setBounds(141, 10, 149, 26);
lblHomework1Login.setText("Homework 1 Login");

CLabel lblUsername = new CLabel(shell, SWT.NONE);
lblUsername.setBounds(10, 74, 76, 26);
lblUsername.setText("Username");

CLabel lblPassword = new CLabel(shell, SWT.NONE);
lblPassword.setBounds(10, 129, 76, 26);
lblPassword.setText("Password");

txtUsername = new Text(shell, SWT.BORDER);
txtUsername.setBounds(117, 74, 255, 26);

txtPassword = new Text(shell, SWT.BORDER);
txtPassword.setBounds(116, 129, 256, 26);

Button btnSubmit = new Button(shell, SWT.BORDER);
btnSubmit.setForeground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_FOREGROUND));
btnSubmit.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
String password = txtPassword.getText();
String username = txtUsername.getText();

// Implementing an action event listener class with conditional statement
@Override
public void actionPerformed(ActionEvent arg0) {
String username = txtUsername.getText();
String password = txtPassword.getText();
if (username.equals("student1") && password.equals("987123"))
JOptionPane.showMessageDialog(null, "Login Successful");
else
JOptionPane.showMessageDialog(null, "Username or Password mismatch ");
}


}
});

最新编辑,我看到以下错误:标记"MessageDialog"语法错误,删除这个标记。此外,提交按钮仍然不起作用。感谢所有帮助过我的人。

// Implementing an selection event listener class with conditional statement
@Override
public void handle(SelectionEvent onClick) {
String Username = txtUsername.getText();
String Password = txtPassword.getText();
if (onClick.getSource() == btnSubmit)(Username.equals("student1") && Password.equals("987123"))
MessageDialog.openInformation(shell, "Login", "Login Successful");
else
MessageDialog.openError(shell, "Login", "Username or Password mismatch");
}

}
);


你展示的代码不能编译,你不能像那样在widgetSelected方法中嵌套actionPerformed方法。

JOptionPane是一个Java Swing类,不要尝试将Swing与SWT混合,它们是不同的gui,很难一起工作。

这段代码为我工作:

shell.setSize(450, 300);
shell.setText("Homework 1 GUI");
shell.setLayout(new GridLayout(2, false));
Label lblHomework1Login = new Label(shell, SWT.NONE);
lblHomework1Login.setText("Homework 1 Login");
lblHomework1Login.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 2, 1));
Label lblUsername = new Label(shell, SWT.NONE);
lblUsername.setText("Username");
Text txtUsername = new Text(shell, SWT.BORDER);
txtUsername.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
Label lblPassword = new Label(shell, SWT.NONE);
lblPassword.setText("Password");
Text txtPassword = new Text(shell, SWT.BORDER);
txtPassword.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
Button btnSubmit = new Button(shell, SWT.BORDER);
btnSubmit.setText("Submit");
btnSubmit.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
String password = txtPassword.getText();
String username = txtUsername.getText();
if (username.equals("student1") && password.equals("987123"))
MessageDialog.openInformation(shell, "Login", "Login Successful");
else
MessageDialog.openError(shell, "Login", "Username or Password mismatch");
}
});

您的btnSubmit没有文本,我添加了一些。

我使用JFaceMessageDialog来处理消息,如果你不想使用JFace,你可以使用SWTMessageBox

我使用布局而不是setBounds。应该避免使用setBounds,因为它在不同的字体下不能很好地工作。

使用MessageBox:

btnSubmit.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
String password = txtPassword.getText();
String username = txtUsername.getText();
MessageBox msgBox = new MessageBox(shell);
if (username.equals("student1") && password.equals("987123"))
msgBox.setMessage("Login Successful");
else
msgBox.setMessage("Username or Password mismatch");
msgBox.open();
}
});

每当我在Java gui中使用Button类时,我总是这样设置按钮:

Button submitButton = new Button("Submit Button")
submitButton.setOnAction(this);

则需要代码"听到";当按下按钮时。以下方法"听";按钮被按下,然后运行以下代码:

@Override
public void handle(ActionEvent onClick) {
if (onClick.getSource() == submitButton)
{
// Do whatever you need to do
}
}

这样做的好处:

  • 处理
  • 的代码要少得多
  • 你所需要做的就是改变getSource()方法设置为
  • 更容易阅读

最新更新