我想为所有 JavaFX文本输入设置插入颜色(例如TextField,TextArea,ComboBox中的那些:可编辑,DatePicker等等)
我发现这个Stackoverflow回答:How to change the caret color in JavaFX 2.0?
...以及GitHub上的示例。
第一个确实改变了和的插入颜色,这是不好的。第二个扩展了TextFieldSkin类,它已经更好了,但我怎样才能在CSS中使用它?
感谢任何帮助。
更新1:
我为JavaFX控件找到了以下CSS样式属性:-fx-skin
。
理论上这允许我设置一个自定义皮肤类(-fx-skin: "package.MySkin";
),但是,不使用皮肤类!
该课程如下所示:
package gui;
…
public class MyTextFieldSkin extends TextFieldSkin
{
public MyTextFieldSkin(TextField tf) {
super(tf);
System.out.println("MyTextFieldSkin constructor called!");
ReadOnlyObjectWrapper<Color> farbe = new ReadOnlyObjectWrapper<>(Color.green);
caretPath.strokeProperty().bind(farbe);
caretPath.setStrokeWidth(1.5);
}
}
...并在CSS中设置:
.text-field {
-fx-skin: "gui.MyTextFieldSkin";
}
我做错了什么?我查看了AquaFX的源代码,他们这样做的方式和我一样!
答案 0 :(得分:1)
经过一番尝试&amp;错误,我通过以下方式解决了问题:
我收集了所有TextField
个和TextField
中包含ComboBox
s的控件(如DatePicker
,TitledPane
等等),以递归方式(在{ {1}},ScrollPane
,SplitPane
和TabPane
,因为他们不会在getChildren()
中发布他们的孩子,因此必须致电getContent()
各个类的方法并扫描它。)
在我拥有所有TextField
控件之后,我使用以下代码对其进行循环并更改了Skin
:
public class MyTextFieldSkin extends TextFieldSkin {
public MyTextFieldSkin(TextField tf)
{
super(tf);
ReadOnlyObjectWrapper<Color> color = new ReadOnlyObjectWrapper<>(Color.RED);
caretPath.strokeProperty().bind(color);
}
}
然后我只需要打电话
textfield.setSkin(new MyTextFieldSkin(textfield));
那是关于它的。
干杯