JavaFX 内联 CSS 悬停效果

The*_*nes 2 css java user-interface javafx

我正在通过从标签扩展来构建服装按钮。我知道您可以在 .java 文件中使用 CSS:

setStyle("-fx-background-color: #101010");
Run Code Online (Sandbox Code Playgroud)

这非常酷,我经常使用它。

但我的问题是:这似乎不适用于悬停效果。在外部 CSS 文件中,您可以拥有:

#LabelButton:hover {
  -fx-background-color: #aaaaaa;
}
Run Code Online (Sandbox Code Playgroud)

我希望在我的 Java 文件中使用“XXX:hover”这个功能,因为十六进制颜色代码必须是可变的,而在使用外部 CSS 文件时这是不可能的。所以我有点想要这样:

setStyle("hover:-fx-background-color: #101010");
Run Code Online (Sandbox Code Playgroud)

但我找不到正确的语法,更不用说有语法了。如果没有这样的功能,那我该怎么办呢?谢谢!

fab*_*ian 5

在内联 CSS 中无法使用任何类型的选择器。内联样式始终应用于节点,无论其状态如何(分配相应的节点属性除外)。

您可以将该style属性绑定到hover节点的属性。

myButton.styleProperty().bind(Bindings.when(myButton.hoverProperty())
                                      .then("-fx-background-color: #101010")
                                      .otherwise("-fx-background-color: #aaaaaa"));
Run Code Online (Sandbox Code Playgroud)

如果您想要以不同的方式设置聚焦按钮和按下按钮的样式,这可能会变得非常难看。出于这个原因,我建议结合 CSS 和内联 CSS 来实现所需的样式:

您可以在 CSS 中定义自己的变量颜色变量:

样式表

myButton.styleProperty().bind(Bindings.when(myButton.hoverProperty())
                                      .then("-fx-background-color: #101010")
                                      .otherwise("-fx-background-color: #aaaaaa"));
Run Code Online (Sandbox Code Playgroud)

java代码

myButton.setStyle("-fx-normal-background: #101010; -fx-hovered-background: #aaaaaa;");
Run Code Online (Sandbox Code Playgroud)