密码字段中的子弹到星号

Ilu*_*ent 2 javafx

是否可以将这些项目符号更改为密码字段中的星号?如果是这样,怎么样? 图片

Edv*_*yse 6

不幸的是,子弹被硬编码,TextFieldSkin但您可以通过覆盖默认值轻松创建PasswordSkin,如下所示:

import com.sun.javafx.scene.control.skin.TextFieldSkin;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;

public class PasswordSkin extends TextFieldSkin {
    public PasswordSkin(TextField textField) {
        super(textField);
    }

    protected String maskText(String txt) {
        if (getSkinnable() instanceof PasswordField) {
            int n = txt.length();
            StringBuilder passwordBuilder = new StringBuilder(n);
            for (int i = 0; i < n; i++)
                passwordBuilder.append("*");

            return passwordBuilder.toString();
        } else {
            return txt;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用它,叫setSkin上你的PasswordField:

PasswordField input = new PasswordField();
input.setSkin(new PasswordSkin(input));
Run Code Online (Sandbox Code Playgroud)

或者,您可以在样式表中包含以下内容,而不是手动设置外观:

.password-field {
    -fx-skin: 'sample.PasswordSkin'
}
Run Code Online (Sandbox Code Playgroud)

确保sample.PasswordSkin已更新以反映您的皮肤的完全限定类名.现在,加载样式表的每个场景或节点都不需要手动配置外观.

  • 请注意,在Java 9中,`TextFieldSkin`的包名称更改为`javafx.scene.control.skin.TextFieldSkin`(它成为公共API的一部分). (2认同)