L'ajout d'un champ de mot de passe - GUI
J'ai un JTextField
. La même JTextField
sera utilisé pour obtenir à la fois le nom et le mot de passe de l'utilisateur. Donc, si c'est d'obtenir le nom d'utilisateur, je voudrais afficher ce que l'utilisateur tape sur le champ de Texte. Mais s'il est l'insertion d'un mot de passe, le terrain ne doit pas afficher le mot de passe (mais l'affichage de * caractères à la place).
Comment puis-je faire un component swing jtextfield masquer les caractères qu'il/elle types ?
Pseudocode :
If (usernameBool!=true) {
//Display normal text - user is able to see the password
} else {
//This is going to be a password field, so i need to not show the password to the user instead show it as ******* instead.
}
Remarque: je ne veux pas utiliser JPasswordField
pour cette
- "Je ne veux pas utiliser JPasswordField pour ce" Et pourquoi exactement?
- Pouvez-vous expliquer pourquoi vous voulez être exactement la même obect? Le fait que dans l'interface graphique, vous aurez juste un domaine ne signifie pas que vous ne pouvez pas utiliser un
JPasswordField
qui existe juste pour cela. Vous pouvez changer le champ sous-jacent et de basculer entre les deux. - Parce que je suis en utilisant le même component swing jtextfield pour obtenir le nom d'utilisateur et mot de passe. et je ne veux pas ajouter n'importe quel autre domaine
- "Je ne veux pas". Si vous préférez écrire quelque chose de maladroit et de perdre du temps pour ça, sans raison? Ce n'est pas un bon point.
- mais s'il vous plaît expliquer les raisons derrière cette décision. Peut-être nous pouvons vous aider à résoudre ce mieux si vous nous en dire plus en détail. Par exemple, si la clé est que vous voulez l'emplacement du nom et de l'entrée de mot de passe pour être le même endroit exact de l'interface graphique, alors peut-être un CardLayout vous permettra de changer un component swing jtextfield pour un JPasswordField.
- Je suis à l'aide d'un seul cadre pour l'authentification. Donc je vais devoir prendre le nom d'utilisateur et mot de passe champs à partir de ce cadre. Et, je ne peux pas changer la structure de ce cadre. (je ne peux pas enlever l'existant component swing jtextfield et ajouter un JPasswordField)
- Pop un
JOptionPane
avec les deux composantes vu ici. - Je ne comprends juste pas pourquoi ce post est downvoted. C'est une question valable, et aucune ne semble connaître la réponse. Ainsi, c'est pourquoi il est downvoted ?
- Je lui ai donné un -1 parce que 1) C'est un idiot exigence (utiliser une insécurité composant un mot de passe), combiné avec l'2) Une facile raison pour ne pas utiliser le composant approprié. P. S. j'ai aussi jeté dans un vote à près "pas une vraie question".
- C'était probablement vers le bas voté parce que c'était très incomplet au début et a été difficile d'obtenir des renseignements de vous nécessaire pour nous permettre de répondre à la question. Pas mon bas de vote par la voie.
Vous devez vous connecter pour publier un commentaire.
De nouveau, une solution possible est d'utiliser un CardLayout de composants remplaçables:
La
JPasswordField
a une méthode qui estsetEchoChar()
. Que les états de documentation:Vous pouvez ensuite utiliser juste un
JPasswordField
et activer l'écho de caractères (par exemple.'*'
) juste pour le mot de passe.Je vous suggère d'utiliser un
JPasswordField
. Puis, quand votreusernameBool
est vrai, réglez-le pour montrer les caractères, mais sinon masquer les caractères, comme ceci:Vous pouvez créer votre propre component swing jtextfield qui votre propre stratégie. Par exemple, vous pouvez garder le dernier caractère (comme iOS si je me souviens) ou ne pas montrer quoi que ce soit (Linux style).