我正在制作需要在每次按下时在两种颜色之间切换的按钮。我想通过比较样式类来查看它是否与“绿色”或“红色” css类匹配。像这样

if(clickedBtn.getStyleClass() == "green") {
            clickedBtn.getStyleClass().add("red");
        } else {
        clickedBtn.getStyleClass().add("green");
        }


这不起作用,因为它无法将“绿色”识别为任何东西。有没有更简单的方法可以做到这一点?我只需要带有可选座位的图形显示。谢谢

最佳答案

.getStyleClass()重新运行包含样式类的ObservableList。这永远不会是与字符串文字相同的对象,因此==检查总是产生false。检查节点是否具有样式类的正确方法是调用列表的contains方法:

if (clickedBtn.getStyleClass().contains("green")) {


因为您可能希望红色和绿色互斥。您还应该删除样式类:

if(clickedBtn.getStyleClass().remove("green")) {
    clickedBtn.getStyleClass().add("red");
} else {
    clickedBtn.getStyleClass().remove("red");
    clickedBtn.getStyleClass().add("green");
}


但是,使用伪类可能会更方便一些:

private final static PseudoClass GREEN = PseudoClass.getPseudoClass("green");
private final static PseudoClass RED = PseudoClass.getPseudoClass("red");

...

boolean isGreen = clickedBtn.getPseudoClassStates().contains(GREEN);
clickedBtn.pseudoClassStateChanged(GREEN, !isGreen);
clickedBtn.pseudoClassStateChanged(RED, isGreen);

10-06 00:38