我正在制作需要在每次按下时在两种颜色之间切换的按钮。我想通过比较样式类来查看它是否与“绿色”或“红色” 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);