2013-12-18 19 views
3

我有一个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)); 
} 

我仍然要声明每个状态,但至少我可以更改底层的颜色而不必修改每个状态。主要的问题是,这会取代按钮的整体外观,所以我希望更好的东西...: -/

+0

难道只能让按钮变成白色并使用alpha百分比玩吗?没有测试过它,但也许它会给你想要的结果。像'rgba(255,255,255,.80)' – Perneel

+0

感谢@Perneel!我已经想到了(更新了这个问题),虽然没有我期待的那么优雅,但它还是有用的。 – haraldK

回答

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)使用一些预定义的查找颜色。你可以挖掘这些来源,看看它们是如何使用的。如果您重新定义场景图中节点的这些查找,则新定义将传播到所有子节点。

+0

在面板上设置“-fx-base”和“-fx-background”的组合工作!现在看起来完全像我想要的那样,没有多余的CSS,谢谢! :-) – haraldK

+0

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

+0

很酷。感谢您的额外解释!您可能需要将其添加到您的答案以供将来参考。 :-) – haraldK

相关问题