您好我在使用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);
答案 0 :(得分:3)
您认为setText
的{{1}} 无效是不正确的。请参阅以下代码,它们按预期工作:
JPasswordField
您在构造函数中传递文本的变体(就像您在代码中所做的那样)也可以按预期工作。
所以我会朝另一个方向搜寻。以下部分
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 );
}
} );
}
让我想知道您是否在UI中看到了新的txtFtpUser.setText(username);
panel_1.remove(txtFtpPassword);
txtFtpPassword = new JPasswordField(password);
txtFtpPassword.setBounds(10, 113, 206, 23);
panel_1.add(txtFtpPassword);
。当您从JPasswordField
添加/删除组件时,您需要使布局无效,如Container#add
和Container#remove
方法中所述。
注意:在将密码作为Container
传递时,请注意安全问题。但是根据你的评论,你已经意识到了这一点。
答案 1 :(得分:1)
我在这里发现了错误:
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 :)谢谢你的帮助。