0 java
我有一天晚上做了一些编程,遇到了问题.看来我的按钮的动作监听器中的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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于你如何比较pass和be Strings
if (pass == be) {
tarea.setText("Successful");
}
Run Code Online (Sandbox Code Playgroud)
这是比较对象引用,而不是它们的内容,它们总是错误的......相反,你应该使用它 .equals
if (pass.equals(be)) {
tarea.setText("Successful");
}
Run Code Online (Sandbox Code Playgroud)
这将进行区分大小写的比较.如果需要,您也可以.equalsIgnoreCase在案例无关紧要的地方使用
对于密码,您应该使用JPasswordField密码并将其存储在char数组中,因为String值更容易从内存中挑选出来.
那么这将需要您使用Arrays.equals(char\[\], char\[\]),而不是
有关详细信息,请参见如何使用密码字段 ...