gpt4 book ai didi

utf-8 - 如何取消屏蔽 JavaFX PasswordField 或正确屏蔽 TextField?

转载 作者:行者123 更新时间:2023-12-04 00:04:01 26 4
gpt4 key购买 nike

在我的 UI 中,我有一个 PasswordField像这样(嗯,底部的那个!):

Login dialog with JavaFX PasswordField

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

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

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

最佳答案

> 但是,我在 JavaFX API 中找不到任何可以让我这样做的东西?
PasswordField默认情况下,组件不显示蒙版文本。但是您可以使用 PasswordFieldTextField并分别使用这些组件切换屏蔽/未屏蔽文本。 TextField 显示未屏蔽文本的位置,如下面的示例演示所示。

> 我想使用一个 TextField 来显示最后按下的键仅半秒或直到按下下一个键,然后他将屏蔽所有以前的用户输入。

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

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

坦率地说,没有捕获你在这里说的话。您可以通过向 PasswordField.textPrperty() 添加更改监听器来跟踪文本更改。并做动画、计时器等。您可以通过扩展 PasswordFieldSkin 来覆盖默认的子弹 mask 并通过 CSS -fx-skin 使用它.参见其source here 中的子弹定义。 :

public class PasswordFieldSkin extends TextFieldSkin {
public static final char BULLET = '\u2022';

public PasswordFieldSkin(PasswordField passwordField) {
super(passwordField, new PasswordFieldBehavior(passwordField));
}

@Override protected String maskText(String txt) {
TextField textField = getSkinnable();

int n = textField.getLength();
StringBuilder passwordBuilder = new StringBuilder(n);
for (int i=0; i<n; i++) {
passwordBuilder.append(BULLET);
}

return passwordBuilder.toString();
}
}

最后,这是使用绑定(bind)显示密码字符的演示应用程序:
@Override
public void start(Stage primaryStage) {

// text field to show password as unmasked
final TextField textField = new TextField();
// Set initial state
textField.setManaged(false);
textField.setVisible(false);

// Actual password field
final PasswordField passwordField = new PasswordField();

CheckBox checkBox = new CheckBox("Show/Hide password");

// Bind properties. Toggle textField and passwordField
// visibility and managability properties mutually when checkbox's state is changed.
// Because we want to display only one component (textField or passwordField)
// on the scene at a time.
textField.managedProperty().bind(checkBox.selectedProperty());
textField.visibleProperty().bind(checkBox.selectedProperty());

passwordField.managedProperty().bind(checkBox.selectedProperty().not());
passwordField.visibleProperty().bind(checkBox.selectedProperty().not());

// Bind the textField and passwordField text values bidirectionally.
textField.textProperty().bindBidirectional(passwordField.textProperty());

VBox root = new VBox(10);
root.getChildren().addAll(passwordField, textField, checkBox);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Demo");
primaryStage.setScene(scene);
primaryStage.show();
}

关于utf-8 - 如何取消屏蔽 JavaFX PasswordField 或正确屏蔽 TextField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com