2012-11-09 100 views
0

你好我正在使用JPasswordField當我想讀它時,getPassword沒有問題,但我正在做的是當沒有設置密碼時它顯示一個InputDialog你可以輸入密碼和那麼它應該將密碼設置爲JPasswordField,但是當我使用setText時,它不會設置它,並且不存在方法setPassword()。所以我的問題是我如何設置密碼到JPasswordFieldJPasswordField如何設置密碼

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

http://docs.oracle.com/javase/7/docs/api/javax/swing/JPasswordField.html#JPasswordField%28java.lang.String%29 – KrHubert

+0

沒有一些代碼片段,很難告訴你什麼是錯的。 – Flawyte

+0

我做了txtPassword = new JPasswordField(「PASSWORD」);但它仍然沒有工作。我也試過panel.remove(txtPassword);定義它新的,setBounds並添加它與panel.add(txtPassword)再次它也沒有工作。 – alexj

回答

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。

3

你聲稱setText不是一個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); 
     } 
    }); 
    } 

,你通過在構造函數中的文本(如您在代碼中所做的那樣)的變體也按預期工作。

所以我會搜索另一個方向。以下部分

txtFtpUser.setText(username); 
panel_1.remove(txtFtpPassword); 
txtFtpPassword = new JPasswordField(password); 
txtFtpPassword.setBounds(10, 113, 206, 23); 
panel_1.add(txtFtpPassword); 

讓我不知道你們是否看到你的新JPasswordField在你的UI。當您添加/刪除Container中的組件時,您需要使佈局無效,如Container#addContainer#remove方法中所述。

注:各地傳遞密碼作爲String時要注意的安全問題。但根據你的意見,你已經意識到這一點。

+0

我也無效,但它不起作用。 – alexj

+1

@alexj沒有顯示在您的代碼中。考慮發佈[SSCCE](http:// sscce。org),所以我們可以停止猜測,並提供一些真正的答案 – Robin

+0

當我刪除它時,它被刪除,當我添加它doesent裏面有任何東西 – alexj