Как восстановить исходный CSS-код после добавления стиля?

В основном я изменил css для текстового поля в javafx, добавив класс стиля следующим образом:

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

Но тогда я хочу вернуть его обратно к своему оригинальному виду. Но так как исходный внешний вид в этом случае является оболочкой по умолчанию для JavaFX, я не могу найти исходный макет для текстовых полей. Я нашел свойства textfieldskin здесь , но это джунгли, и я ничего не могу найти о цвете -fx-control-inner-background, -fx-text-box-border-и -fx-focus-color, который это то, что я хочу знать.

Я пробовал textfield.getStyleClass().remove("textfieldstyle");и думал, что удаляет новый css, но он не применяет старый.

java,javafx,

2

Ответов: 4


6

Чтобы сбросить стиль элемента по умолчанию после его установки, .setStyle("css settings.....");вы можете просто использовать -

textfield.setStyle(null);

Я не уверен, будет ли это работать на нем для элемента, который был применен классом, .getStyleClass().add("textfieldstyle");но если бы вы не могли сделать что-то вроде:

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

5 принят

Благодаря комментариям @UlukBiy и @varren я решил проблему. System.out.println(textfield.getStyleClass());был очень полезен, поскольку он позволял мне проверять, какие классы стилей были применены в текстовом поле по умолчанию. И как указано в комментариях те, где text-inputи text-field.

Поэтому, чтобы восстановить значение css текстового поля по умолчанию, я просто сделал:

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

0

Следующий тестовый код работает для меня при добавлении и удалении класса из элемента управления, например 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");
    }
  }
}

0

Короткий способ эффектно удалить свой стиль даже в случае дубликатов, с лямбдой:

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