JavaFX子类伪类

时间:2017-08-31 07:53:54

标签: css javafx

我想在一个CSS中制作2种不同风格的按钮。因此,在创建第二个按钮时,我使用以下方法为其添加了类:

close.getStyleClass().add("close-button");

所以现在我可以在css中引用这个按钮:

.button.close-button

但是现在我不知道在使用.close-button类时如何引用按钮的伪类。

我尝试通过

访问它
.button.close-button:selected

.button:selected.close-button

这些似乎都不起作用。有什么方法可以做到吗?或者我是否必须为.close-button类创建自己的伪类,并在代码中的btton监听器中添加和删除它们?

我正在创建按钮:

Button close = new Button("X");
close.getStyleClass().add("close-button");
close.setOnAction((event) -> {
    ....
});

比我将它添加到布局中:     HBox hbox = new HBox(rbSelect,label,pane,close);

我的css看起来像:

.button {
   ...
}

.button.close-button {
   -fx-background-color: #E81123;
}

.button:selected.close-button {
   -fx-background-color: greenyellow;
}

按钮如下所示: Button not clicked

当我点击它时: enter image description here

似乎没有任何反应,当我希望按钮将颜色改为greenyellow

1 个答案:

答案 0 :(得分:1)

我不是100%确定这是必要的,但按照惯例,在类选择器之后添加伪类选择器:

.button.close-button:selected {
   -fx-background-color: greenyellow;
}

selected没有Button个伪类。它适用于CheckBoxToggleButton,但不适用于常规Button。可用的伪类是:pressed:hoversee css reference

当然,您可以自己添加伪类,假设您使用的是JavaFX 8:

PseudoClass selected = PseudoClass.getPseudoClass("selected");

close.setOnAction((event) -> {
    ....
    close.pseudoClassStateChanged(selected, true);
});