基本上我通过添加这样的样式类来改变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,但它不会再次应用旧的。
答案 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-input
和text-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"));