在Jython中隐藏输入框中的密码
我正在使用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();
}
}