gpt4 book ai didi

java - 您知道在不使用 CSS 属性的情况下获取 TextArea 的 JavaFX Text 节点的方法吗?

转载 作者:行者123 更新时间:2023-11-30 10:17:50 28 4
gpt4 key购买 nike

我希望找到一种无需使用 CSS 属性即可获取 TextArea 的 Text 节点的方法。 JavaFX 的 Text 节点暴露了方法 setUnderline(boolean)通过它我可以设置 TextArea 的下划线属性;相反,TextArea 不公开相同的方法。此外,TextArea.getText() 方法返回一个 String 而不是 Text 对象。所以,我解决了这个问题如下:在代码中,

// Fields..
private final PseudoClass pseudoClass = PseudoClass.getPseudoClass("underlined");
private final SimpleBooleanProperty underlinedProperty = new SimpleBooleanProperty(false);
private final TextArea textArea = new TextArea();

[...]

// In a method (ex. in the constructor)..
{
textArea.setId("textArea");
underlinedProperty.addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
Node node = textArea.getScene().lookup("#textArea .text");
node.pseudoClassStateChanged(pseudoClass, newValue);
}
});
}

[...]

// The class exposes the getter method for the underlinedProperty
public SimpleBooleanProperty getUnderlinedProperty() {
return underlinedProperty;
}

现在,我用这段代码创建了一个 CSS 表:

#textArea .text {
/* some styles */
-fx-underline: false;
}

#textArea .text:underlined {
-fx-underline: true;
}

最后在其他一些类中调用了上面的类:

{
'handleOfClassInPoint1'.getUnderlineProperty().set(true); // or false
}

问题出在 lookup() 方法上:只有在创建了所有 fx 节点时,该方法才返回一个非空值,即仅在一些图形结果之后。我希望找到一个程序来设置 TextArea 的下划线属性而不使用 CSS(例如,切换按钮管理下划线属性:如果选择切换,则 TextArea 的文本带有下划线)。任何人都可以帮助我吗?非常感谢!

最佳答案

根据您在问题评论中的描述,我会推荐以下内容。

创建自定义 TextArea看起来像这样:

public class CustomTextArea extends TextArea {

private static final PseudoClass UNDERLINED = PseudoClass.getPseudoClass("underlined");

private final BooleanProperty underlined = new SimpleBooleanProperty(this, "underlined") {
@Override
protected void invalidated() {
pseudoClassStateChanged(UNDERLINED, get()); // update PseudoClass state to match
// the current value of the property
}
};

// property access methods

public final void setUnderlined(boolean underlined) {
this.underlined.set(underlined);
}

public final boolean isUnderlined() {
return underlined.get();
}

public final BooleanProperty underlinedProperty() {
return underlined;
}

// constructor

public CustomTextArea(String text, boolean underlined) {
super(text);
setUnderlined(underlined);
getStyleClass().add("custom-text-area"); // to allow specific CSS styling
}

}

然后在你的 CSS 中你会这样做:

.custom-text-area .text {
-fx-underline: false;
}

.custom-text-area:underlined .text {
-fx-underline: true;
}

CSS 设置在任何 TextCustomTextArea 的后代节点.第一个 CSS 规则(没有“:下划线”的那个)甚至可能不是必需的,因为默认为 -fx-underline对于 Text节点是 false .

然后查询文本是否带下划线很简单,调用area.isUnderlined()即可。其中 areaCustomTextArea 的实例.

要保持正确的视觉状态,您可以绑定(bind) underlined CustomTextArea 的属性(property)双向到 selected ToggleButton 的属性.当一个发生变化时,另一个将反射(reflect)该变化。

如果您只想为特定的 CustomTextArea 添加样式那么你仍然可以给它一个 ID 并在 CSS 中用 #ID 引用它.

关于java - 您知道在不使用 CSS 属性的情况下获取 TextArea 的 JavaFX Text 节点的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49559437/

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