JavaFX自定义伪类CSS解析错误排查求助
排查与修复步骤
1. 先解决CSS语法错误(最可能的原因)
你看到的Expected COLON at [1,11]警告是CSS解析失败的信号,和suggested伪类本身无关。大概率是这行代码之前的CSS有语法问题:
- 检查前面的选择器有没有漏写闭合的
},或者字符串有没有正确收尾; - 确认
.btn-apply:suggested里的冒号是英文半角,中间没有多余空格(比如写成.btn-apply :suggested就会报错)。
2. 确认自定义伪类的Java实现没问题
你的SuggestedButton类里,伪状态切换的代码得写对:
import javafx.css.PseudoClass; import javafx.scene.control.Button; public class SuggestedButton extends Button { private static final PseudoClass SUGGESTED_PSEUDO = PseudoClass.getPseudoClass("suggested"); private boolean isSuggested; public boolean isSuggested() { return isSuggested; } public void setSuggested(boolean suggested) { this.isSuggested = suggested; pseudoClassStateChanged(SUGGESTED_PSEUDO, suggested); } }
调用setSuggested()的时候,可以打印getPseudoClassStates()看看伪状态是不是真的被加上了。
3. 检查按钮的样式类和FXML配置
- FXML里得正确用你的自定义按钮,还要加上
btn-apply样式类:<?xml version="1.0" encoding="UTF-8"?> <?import com.yourpackage.SuggestedButton?> <SuggestedButton fx:id="applyBtn" styleClass="btn-apply" text="Apply" /> - 如果是Java代码创建的按钮,别忘了加样式类:
applyBtn.getStyleClass().add("btn-apply");
4. 简化CSS测试
先把其他CSS代码注释掉,只留最基础的测试代码:
.btn-apply { -fx-background-color: #ccc; } .btn-apply:suggested { -fx-background-color: #2ecc71; }
要是这时候按钮能变色,说明之前的CSS里藏着其他语法错误;要是还不行,再回头检查伪状态的触发逻辑。
内容的提问来源于stack exchange,提问作者Mike Bruce
相关产品推荐
相关产品推荐

