javafx - 更改插入符号颜色的最简单方法

时间:2017-06-12 07:44:46

标签: css javafx skinning

我想为所有 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的源代码,他们这样做的方式和我一样!

1 个答案:

答案 0 :(得分:1)

经过一番尝试&amp;错误,我通过以下方式解决了问题:

我收集了所有TextField个和TextField中包含ComboBox s的控件(如DatePickerTitledPane等等),以递归方式(在{ {1}},ScrollPaneSplitPaneTabPane,因为他们不会在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));

那是关于它的。

干杯