添加样式后如何重置回默认 css?

How to reset back to default css after adding style?

基本上我通过添加这样的样式 class 更改了 javafx 中文本字段的 css:

textfield.getStyleClass().add("textfieldstyle");

但我希望能够将它恢复到原来的样子。但由于本例中的原始外观是 JavaFX 的默认外观,所以我找不到文本字段的原始布局。我找到了 textfieldskin 属性 here,但它是一片丛林,我找不到任何关于 -fx-control-inner-background、-fx-text-box-border 和 -fx-focus 颜色的信息-颜色,这就是我想知道的。

我试过textfield.getStyleClass().remove("textfieldstyle"); 并认为确实删除了新的 css,但它不会再次应用旧的。

感谢@UlukBiy 和@varren 的评论,我解决了这个问题。 System.out.println(textfield.getStyleClass()); 非常有用,因为它允许我检查 类 默认应用于文本字段的样式。正如评论中指出的那样 text-inputtext-field.

因此,为了将文本字段的 css 恢复为默认值,我刚刚做了:

textfield.getStyleClass().clear();
textfield.getStyleClass().addAll("text-field", "text-input");

要在使用 .setStyle("css settings....."); 设置元素后重置元素的默认样式,您只需使用 -

textfield.setStyle(null);

我不确定这是否适用于使用 .getStyleClass().add("textfieldstyle"); 应用 class 的元素,但如果不行,您可以执行类似 -

textfield.getStyleClass().clear();
textfield.setStyle(null);

以下测试代码适用于我在文本字段等控件中添加和删除 class:

import javafx.scene.control.TextInputControl;

public class test
{
  protected void setEditable(final TextInputControl toControl, final boolean tlEditable)
  {
    toControl.setEditable(tlEditable);
    if (tlEditable)
    {
      if (toControl.getStyleClass().contains("non-editable-class"))
      {
        toControl.getStyleClass().removeAll("non-editable-class");
      }
    }
    else if (!toControl.getStyleClass().contains("non-editable-class"))
    {
      toControl.getStyleClass().add("non-editable-class");
    }
  }
}

使用 lambda 有效删除样式 class 即使在重复的情况下也是如此:

textfield.getStyleClass().removeIf(style -> style.equals("textfieldstyle"));