答案 0 :(得分: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;
}
}
}
要使用它,请拨打setSkin
上的PasswordField
:
PasswordField input = new PasswordField();
input.setSkin(new PasswordSkin(input));
或者,您可以在样式表中包含以下内容,而不是手动设置外观:
.password-field {
-fx-skin: 'sample.PasswordSkin'
}
确保更新sample.PasswordSkin
以反映您的皮肤的完全限定类名。现在,加载样式表的每个场景或节点都不需要手动配置外观。