Пароль маски в поле ввода в Jython
Я использую Jython и пытаюсь заставить пользователя ввести пароль. Тем не менее, я хотел бы показать звездочку, а не символы, которые вводит пользователь. Мне удалось сделать что-то похожее с помощью getpass, но для этого потребовалось ввести текст в строку cmd, и оно не показывало бы ничего, кроме звездочки.
Я ищу, чтобы пользовательский тип в диалоговом окне; команда "input()" вызывает поле, которое было бы идеально. Например, это:
import sys
password = input("Please enter your password: ")
if password == None: #if the user hits cancel
sys.exit(0)
Тем не менее, он не маскирует текст. Я могу сделать это, используя аспект Java Jython, например, так:
import javax.swing.JOptionPane as JOP
import javax.swing.JPasswordField as JPF
import sys
pwdF = JPF()
choice = JOP.showConfirmDialog(None, pwdF,
"Please enter your password:",
JOP.OK_CANCEL_OPTION)
if choice == JOP.CANCEL_OPTION:
sys.exit(0)
password = pwdF.getText()
Проблема, с которой я столкнулся, заключается в том, что я не могу установить курсор по умолчанию на текстовое поле (вместо этого он запускается кнопкой ОК). Прежде всего, однако, я хотел бы более питонический способ сделать это.
Я немного повозился с java.swing, используя макет и добавляя компоненты; однако я не понял этого достаточно, чтобы настроить его так, чтобы это работало.
Кто-нибудь знает способ создания поля ввода с замаскированным текстом, отличным от Java-версии, которую я разместил?
Благодарю.
1 ответ
Вы можете использовать класс javax.swing.JPasswordField. Пример таков:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
public class PwdForm extends JFrame {
public JFrame frame;
public PwdForm() {
//Create main Panel
JPanel mainPanel = new JPanel();
//Password field
JLabel lblPwd = new JLabel("Password :");
mainPanel.add(lblPwd);
final JPasswordField txtPwd = new JPasswordField(20);
lblPwd.setLabelFor(txtPwd);
mainPanel.add(txtPwd);
//Confirm Button
final JButton btnOk = new JButton("Confirm");
mainPanel.add(btnOk);
//Create and set up the window.
frame = new JFrame("Password Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Set up the content pane.
mainPanel.setOpaque(true); //content panes must be opaque
frame.setContentPane(mainPanel);
//Display the window.
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
}
public static void main(String[] args) {
PwdForm lf = new PwdForm();
}
}