您好,我使用的是JPasswordField,当我想要读取它时,getPassword没有问题,但我所做的是,当没有设置密码时,它会显示一个InputDialog,您可以在其中输入密码,然后它应该将密码设置到JPasswordField中,但是当我使用setText时,它不会设置它,也没有setPassword()方法。因此,我的问题是如何设置JPasswordField的密码
String password = "";
JPasswordField passwordField = new JPasswordField();
passwordField.setEchoChar('*');
Object[] obj = {"Bitte ihr PAsswort eingeben:\n\n", passwordField};
Object stringArray[] = {"OK","Cancel"};
if (JOptionPane.showOptionDialog(null, obj, "Passwort", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, stringArray, obj) == JOptionPane.WARNING_MESSAGE)
{
password = new String(passwordField.getPassword());
}
txtFtpUser.setText(username);
panel_1.remove(txtFtpPassword);
txtFtpPassword = new JPasswordField(password);
txtFtpPassword.setBounds(10, 113, 206, 23);
panel_1.add(txtFtpPassword);发布于 2012-11-09 20:38:40
我发现这里的错误是:
if (JOptionPane.showOptionDialog(null, obj, "Passwort", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, stringArray, obj) == JOptionPane.WARNING_MESSAGE)
{
password = new String(passwordField.getPassword());
}它检查了这是一条警告消息,但这是一个YES_OPTION :)谢谢您的帮助。
发布于 2012-11-09 19:28:06
您声称JPasswordField无法使用setText是不正确的。请看下面这段代码,它可以像预期的那样工作:
public static void main( String[] args ) {
EventQueue.invokeLater( new Runnable() {
@Override
public void run() {
JFrame testFrame = new JFrame( "Test" );
JPasswordField field = new JPasswordField( );
field.setColumns( 20 );
field.setText( "Password" );
testFrame.add( field );
testFrame.pack();
testFrame.setVisible( true );
testFrame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
}
} );
}在构造函数中传递文本的变体(就像您在代码中所做的那样)也可以按预期工作。
所以我会从另一个方向去寻找。下面的部分
txtFtpUser.setText(username);
panel_1.remove(txtFtpPassword);
txtFtpPassword = new JPasswordField(password);
txtFtpPassword.setBounds(10, 113, 206, 23);
panel_1.add(txtFtpPassword);这让我想知道您是否在UI中看到了新的JPasswordField。在Container中添加/删除组件时,需要使布局无效,如Container#add和Container#remove方法中所述。
注意:在将密码作为String传递时,请注意安全问题。但根据你的评论,你已经意识到了这一点。
https://stackoverflow.com/questions/13306689
复制相似问题