Пароль маски в поле ввода в 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();    
    }
}
Другие вопросы по тегам