【问题标题】:javafx - easiest way of changing the caret colorjavafx - 更改插入符号颜色的最简单方法
【发布时间】:2017-06-12 07:44:45
【问题描述】:

我想为 所有 JavaFX 文本输入(例如 TextField、TextArea、ComboBox:editable、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的源码,他们的做法跟我一样!

【问题讨论】:

    标签: css javafx skinning


    【解决方案1】:

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

    我将所有TextFields 和其中包含TextFields 的控件(如ComboBoxDatePicker 等)递归地收集在一个容器内(尊重TitledPaneScrollPane、@ 987654327@和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));
    

    就是这样。

    干杯

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 2013-08-28
      • 2012-12-15
      • 2012-09-04
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      相关资源
      最近更新 更多