我想在JavaFX8中隐藏TextField的输入插入符号。我已经尝试将文本填充设置为白色(我的TextField具有白色背景),但是随后我的用户输入也消失了。
问题是文本字段仍然需要焦点,因此我还想到了一些EventHandler,它侦听用户输入,并在按下某个键时将焦点放在文本字段上,但是那样我会错过第一个键入的键。
有谁知道该怎么做?还是JavaFX8中不可能?
Java 8u40的更新
在JavaFX中添加了CSS样式类,以打开和关闭文本字段插入符,在大多数情况下,这是比自定义外观方法更好的解决方案。
此属性可以在CSS中应用于任何文本区域或文本字段:
-fx-display-caret: false;
有关更多详细信息,请参见相关问题:
您可以使用自定义外观来控制文本字段插入符号。
样本皮肤
允许您在构造函数中指定插入号颜色。
注意:此解决方案是从com.sun类扩展而来的,因此不能保证在将来的JavaFX版本中可以继续使用。(此解决方案已针对Java8u25进行了测试,并适用于该版本)。
我建议您在JavaFX问题跟踪器中创建功能请求,以使用公开支持的方法(例如,添加新的CSS属性来控制插入符号的外观)来对插入符号进行更多控制。
import com.sun.javafx.scene.control.skin.TextFieldSkin;
import javafx.scene.control.TextField;
import javafx.scene.paint.Color;
public class TextFieldCaretControlSkin extends TextFieldSkin {
public TextFieldCaretControlSkin(TextField textField, Color caretColor) {
super(textField);
setCaretColor(caretColor);
}
private void setCaretColor(Color color) {
caretPath.strokeProperty().unbind();
caretPath.fillProperty().unbind();
caretPath.setStroke(color);
caretPath.setFill(color);
}
}
样品申请
演示自定义TextFieldCaretControlSkin的用法。
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class CaretColorizer extends Application {
@Override
public void start(Stage stage) throws Exception {
TextField redCaretTextField = new TextField("Red Caret");
redCaretTextField.setSkin(
new TextFieldCaretControlSkin(
redCaretTextField,
Color.RED
)
);
TextField noCaretTextField = new TextField("No Caret");
noCaretTextField.setSkin(
new TextFieldCaretControlSkin(
noCaretTextField,
Color.TRANSPARENT
)
);
TextField normalTextField = new TextField("Standard Caret");
VBox layout = new VBox(
10,
redCaretTextField,
noCaretTextField,
normalTextField
);
layout.setPadding(new Insets(10));
stage.setScene(new Scene(layout));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句