我有一天晚上做了一些编程,但遇到了问题。看来我的按钮的动作监听器中的if语句没有被拾取。我对编程很陌生,所以我希望它不是太明显任何建议?这是代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Login extends JFrame implements ActionListener {
JTextField tfUsername, tfPassword;
JLabel jlUser, jlPass;
JTextArea tarea;
JButton bLogin;
public Login(){
JFrame frame = new JFrame("Login Test");
JPanel panel = new JPanel();
jlUser = new JLabel("Username");
tfUsername = new JTextField(20);
jlPass = new JLabel("Password");
tfPassword = new JTextField(20);
bLogin = new JButton("Login");
tarea = new JTextArea();
frame.setSize(335,150);
frame.add(panel);
panel.add(jlUser);
panel.add(tfUsername);
panel.add(jlPass);
panel.add(tfPassword);
panel.add(bLogin);
panel.add(tarea);
bLogin.addActionListener(this);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new Login();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == bLogin){
String user = tfUsername.getText();
String pass = tfPassword.getText();
String be = "hi";
if(pass == be){
tarea.setText("Successful");
}
}
}
答案 0 :(得分:6)
问题在于您如何比较pass
和be
String
if (pass == be) {
tarea.setText("Successful");
}
这是比较对象引用,而不是它们的内容,它们总是错误的......相反,你应该使用.equals
if (pass.equals(be)) {
tarea.setText("Successful");
}
这将进行区分大小写的比较。如果需要,您还可以使用.equalsIgnoreCase
无关紧要的情况
对于密码,您应该使用JPasswordField
并将密码存储在char
数组中,因为String
值更容易从内存中选择。
这将要求您使用Arrays.equals(char\[\], char\[\])
代替
有关详细信息,请参阅How to use Password Fields ...
答案 1 :(得分:1)
到目前为止,我能看到的是字符串比较错误。发布错误日志以查看是否存在任何其他错误。 在字符串匹配中尝试
if (pass.equals(be)) {
tarea.setText("Successful");
}
您也可以使用compareto函数来检查字符串
传递的gettext也不是很安全