是否可以在JavaFX 2中“调色”一个按钮

时间:2013-12-18 15:16:56

标签: css javafx-2

我有一个JavaFX 2应用程序,我的所有按钮都使用默认样式(灰色渐变)。在应用程序的某些特殊区域,背景颜色为红色,黄色或绿色。在这些领域,我也有按钮。

我不想重新设置所有三种颜色按钮的所有不同状态(正常,悬停,按下),我只想给按钮添加背景色调。这有可能,怎么样?

如果没有,有没有办法轻松地重新设计基本按钮样式,并自动从这种样式派生悬停和按下状态(伪选择器)?

如果那是不可能的,我愿意接受建议。我最重要的目标是避免冗余/重复声明(特别是渐变),以防有人想要稍后添加不同的颜色面板,或者只是改变阴影其中一种背景颜色。

红色面板/按钮的CSS:

#my-red-panel {
    -fx-border-width: 1;
    -fx-border-radius: 5;
    -fx-background-radius: 5;
    -fx-smooth: true;
    -fx-border-color: rgb(209, 65, 42);
    -fx-background-color: rgba(255, 78, 50, 0.89);
}

#my-red-panel .button {
  -fx-background: rgba(0, 0, 0, 0); /* Now borders look good, but button is still grey*/
}

到目前为止,我最好的选择是使用半透明渐变,如下所示:

#my-red-panel .button {
    -fx-background-color: linear-gradient(rgba(255, 255, 255, 0.3), rgba(0, 0, 0, 0.2));
}

我仍然需要声明每个状态,但至少我可以更改基础颜色而无需修改每个状态。主要问题是这会覆盖按钮的整个外观,所以我希望有更好的东西...: - /

1 个答案:

答案 0 :(得分:5)

未经测试,但尝试尝试:

#my-red-panel {
  -fx-base: rgba(255, 78, 50, 0.89);
}

或者也许:

#my-red-panel .button {
  -fx-base: ... ;
}

取决于您想要的确切效果。

这里的技巧是默认的css(JavaFX2.2的caspian.css或JavaFX8的modena.css)使用一些预定义的查找颜色。您可以挖掘这些来源以了解它们的使用方法。如果为场景图中的节点重新定义这些查找,则新定义将传播到所有子节点。