在Jython中隐藏输入框中的密码

0 投票
1 回答
553 浏览
提问于 2025-04-18 15:58

我正在使用Jython,想让用户输入密码。不过,我希望输入的内容能显示成星号,而不是直接显示用户输入的字符。我之前用过getpass,虽然能做到类似的效果,但它要求在命令行中输入,输入时什么都不显示,而不是显示星号。

我想让用户在一个对话框中输入密码;“input()”命令会弹出一个框,这个框看起来很合适。例如,像这样:

import sys

password = input("Please enter your password: ")
if password == None:     #if the user hits cancel
    sys.exit(0)

但是,这个框并不能把输入的内容隐藏成星号。我可以用Jython的Java部分做到这一点,像这样:

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()

不过,我遇到一个问题,就是光标默认不在文本框里,而是从“确定”按钮开始。最主要的是,我希望有一种更符合Python风格的方法来实现这个功能。

我尝试了很多关于java.swing的东西,使用布局和添加组件,但我对这些理解得不够深,没办法调整到能用的状态。

有没有人知道一种创建输入框的方法,可以隐藏文本,而不是我之前提到的Java版本?

谢谢。

1 个回答

0

你可以使用 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();    
    }
}

撰写回答