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;
}
}