JavaFX 8 - Как инициализировать CSS пользовательского элемента управления при вызове его конструктора

Я программирую пользовательский элемент управления с использованием JavaFX, в частности пользовательскую кнопку.

public class MyButton extends Button {
    public MyButton(String text) {
        super(text);
        getStylesheets().add(getClass().getResource("/mystyle.css").toExternalForm();
        getStyleClass().add("my-button");
    }

    //other stuff
}

Внутри mystyle.css у меня есть следующие правила CSS

.my-button {
    -fx-background-color: gray;
    -fx-background-radius: 2;
}

Затем в методе запуска я добавил кнопку на сцену таким образом

VBox root=new VBox();
Scene scene = new Scene(root, 400, 400);

MyButton button=new MyButton("Click me");

root.getChildren().add(button);
stage.setScene(scene); // stage is the name of Stage parameter
stage.show();

Кнопка выглядит так

введите описание изображения здесь

Теперь, если я добавлю под конструктор кнопки код

button.setBackground(new Background(new BackgroundFill(
    Color.YELLOW, new CornerRadii(20), new Insets(0,0,0,0)
)));

кнопка по-прежнему выглядит так же, вместо этого она должна быть такой

введите описание изображения здесь

Я думаю, что проблема заключается в том, что CSS-класс применяется после определенной задержки, поэтому при применении таблицы стилей переопределяет заданный вручную фон.

То, что я хочу, это способ применения CSS непосредственно внутри конструктора. Является ли это возможным? Спасибо за помощь.

1 ответ

Вам необходимо добавить таблицу стилей с помощью метода getUserAgentStylesheet().

      public class MyButton extends Button {
private final String STYLE_SHEET="/mystyle.css";//Your Stylesheet

  public MyButton(String text) {
      super(text);
      getStyleClass().add("my-button");
  }

  //This method will do the job
  @Override
  public String getUserAgentStylesheet() {
      return STYLE_SHEET;
  }
}
Другие вопросы по тегам