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

时间:2015-06-10 14:27:21

标签: java javafx

基本上我通过添加这样的样式类来改变javafx中文本字段的css:

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

但是我希望能够将它恢复到原来的样子。但由于在这种情况下的原始外观是JavaFX的默认外观,我无法找到文本字段的原始布局。我找到了textfieldskin属性here,但它是一个丛林,我无法找到关于-fx-control-inner-background,-fx-text-box-border和-fx的颜色的任何信息。 -focus-color,这是我想知道的。

我已经尝试textfield.getStyleClass().remove("textfieldstyle");并认为这会删除新的CSS,但它不会再次应用旧的。

4 个答案:

答案 0 :(得分:9)

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

textfield.setStyle(null);

我不确定这对于使用.getStyleClass().add("textfieldstyle");应用了类的元素是否有效,但如果没有,你可以做类似的事情 -

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

答案 1 :(得分:6)

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

因此,要将文本字段的css恢复为默认值,我只是执行了以下操作:

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

答案 2 :(得分:1)

以下测试代码适用于在控件(如Textfield:

)中添加和删除类时
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");
    }
  }
}

答案 3 :(得分:1)

即使在重复的情况下,使用lambda有效删除样式类的简短方法:

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