Utf 8 如何取消JavaFX密码字段的屏蔽或正确屏蔽文本字段?

Utf 8 如何取消JavaFX密码字段的屏蔽或正确屏蔽文本字段?,utf-8,javafx-2,textfield,password-protection,Utf 8,Javafx 2,Textfield,Password Protection,在我的一个UI中,我有一个类似的(urm在底部!): 我希望用户能够选中您在图片中看到的复选框,并显示所有“机密”密码字符。与我们从许多现代密码询问UI中得到的选项没有太大区别但是,我在JavaFXAPI中找不到任何允许我这样做的东西? 如果我的担心是真的,那么我想使用一个文本字段,显示上一次按下的键仅半秒或直到按下下一个键为止,然后他将屏蔽所有以前的用户输入。这将产生一种很酷的动画效果,人们有时可以在现代UI:s中看到这种效果。然而,有没有办法让我掌握依赖操作系统的(我认为它是依赖操作系统的

在我的一个UI中,我有一个类似的(urm在底部!):

我希望用户能够选中您在图片中看到的复选框,并显示所有“机密”密码字符。与我们从许多现代密码询问UI中得到的选项没有太大区别但是,我在JavaFXAPI中找不到任何允许我这样做的东西?

如果我的担心是真的,那么我想使用一个
文本字段
,显示上一次按下的键仅半秒或直到按下下一个键为止,然后他将屏蔽所有以前的用户输入。这将产生一种很酷的动画效果,人们有时可以在现代UI:s中看到这种效果。然而,有没有办法让我掌握依赖操作系统的(我认为它是依赖操作系统的???我应该使用的密码回显字符?

如果无法获得依赖于操作系统的字符,那么我很乐意使用图片上显示的字符(Windows8机器上的JavaFX)。这个陌生人的UTF-8代码点是什么?

但是,我在JavaFXAPI中找不到任何允许我这样做的东西

默认情况下,
PasswordField
组件不显示屏蔽文本。但是,您可以将
PasswordField
TextField
一起使用,并分别使用这些组件切换屏蔽/非屏蔽文本。其中未屏蔽文本由
TextField
显示,如下面的示例演示所示

我想使用一个文本字段,显示上一次按下的键仅半秒或直到按下下一个键为止,然后他将屏蔽所有以前的用户输入

由于
PasswordField
,它本身就是
TextField
的扩展版本。您始终可以使用您提到的属性构建自己的自定义密码文本框

有没有办法让我掌握我应该使用的依赖操作系统(我认为它依赖操作系统)的密码回显字符

坦率地说,我没有领会你在这里说的话。您可以通过将更改侦听器添加到
PasswordField.textproperty()
并执行动画、计时器等来跟踪文本更改。您可以通过扩展
PasswordFieldSkin
并通过CSS
-fx skin
使用它来覆盖默认的项目符号掩码。请参见项目符号在其定义中的定义:


您需要创建三个元素:

  • TextField:密码可见字段
  • PasswodField:密码不可见字段
  • 复选框:切换可见性字段
将密码字段放置在相同的位置(x,y):

如果您想知道密码的值,可以创建一个返回密码的方法:

private String passwordValue() {
    return pass_toggle.isSelected()?
       pass_text.getText(): pass_hidden.getText();
}

我知道这比较老,但我一直在寻找答案,这是我的解决方案:

@FXML
private JFXButton showpassword;
private String password;

showpassword.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
            password = passwordField.getText();
            passwordField.clear();
            passwordField.setPromptText(password);
        });
        showpassword.addEventFilter(MouseEvent.MOUSE_RELEASED, e -> {
            passwordField.setText(password);
            passwordField.setPromptText("Password");
        });

使用带有“WIN10 Eye-unmask password”(WIN10 Eye-unmask password)等图形的按钮,您可以使用自定义的
工具提示来显示密码,并使用
复选框来显示/隐藏
工具提示


您可以找到此演示的代码。

刚刚尝试了您的精彩演示。它工作完美无瑕。你能不能编辑并更新你的答案,对我提出的问题发表一些评论?如果是这样的话,我可以检查你的答案是否被接受。为您的演示准备了许多thanx@马丁南德森。当然不幸的是,我已经离开办公室几天了。我会尽快用评论和参考链接更新我的答案。哇,太棒了!你说你不明白的一个问题是如何获得密码字段使用的依赖操作系统的“子弹面具”。好吧,至少我认为它依赖于操作系统。乌鲁克,你的答案可能是我在stackoverflow.com上读到的最好的答案。坚持下去@UlukBiy非常感谢您提供的绑定示例。
<PasswordField fx:id="pass_hidden" layoutX="X" layoutY="Y" />
<TextField fx:id="pass_text" layoutX="X" layoutY="Y"/>
<CheckBox fx:id="pass_toggle" onAction="#togglevisiblePassword" .... />
@FXML
private TextField pass_text;
@FXML
private CheckBox pass_toggle;
@FXML
private Button btn_start_stop;

/**
 * Controls the visibility of the Password field
 * @param event
 */
@FXML
public void togglevisiblePassword(ActionEvent event) {
    if (pass_toggle.isSelected()) {
        pass_text.setText(pass_hidden.getText());
        pass_text.setVisible(true);
        pass_hidden.setVisible(false);
        return;
    }
    pass_hidden.setText(pass_text.getText());
    pass_hidden.setVisible(true);
    pass_text.setVisible(false);
}

//Run
@Override
public void initialize(URL location, ResourceBundle resources) {
    this.togglevisiblePassword(null);
}
private String passwordValue() {
    return pass_toggle.isSelected()?
       pass_text.getText(): pass_hidden.getText();
}
 void viewpass(ActionEvent event) {




  if (checkpass.isSelected()){
 pass.setPromptText(pass.getText());
 pass.setText(""); 
  pass.setDisable(true);

  }else {
 pass .setText(pass.getPromptText());
 pass.setPromptText("");
 pass.setDisable(false);
 }






}
@FXML
private JFXButton showpassword;
private String password;

showpassword.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
            password = passwordField.getText();
            passwordField.clear();
            passwordField.setPromptText(password);
        });
        showpassword.addEventFilter(MouseEvent.MOUSE_RELEASED, e -> {
            passwordField.setText(password);
            passwordField.setPromptText("Password");
        });