求编程大神帮忙JAVA代码

这个程序是一个简单的用户登录代码
可是为何输入账户密码 确认总是不对
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LoginWindow extends JDialog implements ActionListener
{
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JPanel p4=new JPanel();
JPanel p5=new JPanel();
JTextField txtUserName=new JTextField(15);
JPasswordField txtPassword=new JPasswordField(15);
JButton ok=new JButton("确定");
JButton cancel=new JButton("取消");
public LoginWindow()
{
setModal(true);
setBackground(Color.white);
Container contentPane=this.getContentPane();
contentPane.setLayout(new GridLayout(5,1));
p2.add(new JLabel("用户名:"));
p2.add(txtUserName);
p3.add(new JLabel("密 码:"));
p3.add(txtPassword);
p4.add(ok);
p4.add(cancel);
ok.addActionListener(this);
cancel.addActionListener(this);
txtUserName.addActionListener(this);
txtPassword.addActionListener(this);
contentPane.add(p1);
contentPane.add(p2);
contentPane.add(p3);
contentPane.add(p4);
contentPane.add(p5);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(300,200);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screen.width-300)/2,(screen.width-200)/2);
setTitle("登陆窗口");
setResizable(false);
setVisible(true);

}

/**
* @param args
*/
public static void main(String[] args) {
new LoginWindow();

}

public void actionPerformed(ActionEvent e) {
if(e.getSource()==ok||e.getSource()==txtPassword)
{
if(txtUserName.getText().trim().equals("abc")&&txtPassword.getPassword().toString().trim().equals("abc"))
this.dispose();

else
{
JOptionPane.showMessageDialog(null,"用户名或密码错误,请重新输入");
txtUserName.requestFocus();
txtUserName.setSelectionStart(0);
txtUserName.setSelectionEnd(txtUserName.getText().length());
}
}
else if(e.getSource()==cancel)
{
this.dispose();
System.exit(0);
}
else if(e.getSource()==txtUserName)
txtPassword.requestFocus();
}

}

建议:
txtPassword.getPassword().toString().trim().equals("abc")
改为
String.valueOf(txtPassword.getPassword()).trim().equals("abc")
原因:
首先,getPassword()得到的就时char数组
char[] 数组转换成String可使用new String(char[]); 或 String.valueOf(char[]);
如果char数组调用toString()时,是调用的Object类的toString()方法。如下:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
所以想通过toString转为字符串,得到的结果会让人感到意外。
String类把toString类型重载了,所以自然地得到的便是字符串。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-14
应该是得到txtPassword的文本写错了,你可以System.out.print()输出试试

我记得是这样得到的 new String(txtPassword.getPassword())
第2个回答  2012-12-14
if(txtUserName.getText().trim().equals("abc")&&txtPassword.getPassword().toString().trim().equals("abc"))

这句里用户名少了个toString() 看看是不是这里的问题
第3个回答  2012-12-14
public void actionPerformed(ActionEvent e) {
String name = txtUserName.getText();
String password = new String(txtPassword.getPassword());
if(name.equals("abc") && password.equals("123")) {
JOptionPane.showMessageDialog(null, "登陆成功!");
} else {
JOptionPane.showMessageDialog(null, "登陆失败!");
}
}
试一下,看可以不
第4个回答  2012-12-14
把txtPassword.getPassword().toString().trim()改为
String.valueOf(txtPassword.getPassword()).trim()本回答被网友采纳
相似回答