gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:24 24 4
gpt4 key购买 nike

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

最佳答案

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

我收集了所有 TextField 和其中包含 TextField 的控件(如 ComboBoxDatePicker 和依此类推)在容器内递归(尊重 TitledPaneScrollPaneSplitPaneTabPane,因为它们不在 getChildren() 中发布他们的 child ,因此必须调用各个类的 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));

就是这样。

干杯

关于css - javafx - 更改插入符号颜色的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44493967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com