2017-08-31 159 views
0

我想在一个CSS中制作2种不同样式的按钮。因此,创建第二个按钮,当我使用添加类吧:JavaFX子类伪类

close.getStyleClass().add("close-button"); 

所以现在我可以通过CSS参考此按钮:

.button.close-button 

但现在我不知道如何引用按钮时的伪类使用.close-button类。

我试图通过

.button.close-button:selected 

.button:selected.close-button 

也不这些似乎工作的访问它。有没有办法如何做到这一点?或者我必须为.close-button类创建自己的伪类,并在代码中的btton的侦听器中添加和删除它们?

我使用创建按钮:

Button close = new Button("X"); 
close.getStyleClass().add("close-button"); 
close.setOnAction((event) -> { 
    .... 
}); 

比我将其添加到布局: HBox中的hbox =新HBox中(rbSelect,标签,窗格中,接近);

我的CSS是这样的:

.button { 
    ... 
} 

.button.close-button { 
    -fx-background-color: #E81123; 
} 

.button:selected.close-button { 
    -fx-background-color: greenyellow; 
} 

的按钮看起来是这样的: Button not clicked

当我点击它: enter image description here

好像什么也没有发生,我会期待按钮将颜色更改为greenyellow

+0

我认为这应该工作哟描述第一种方式。你能提供一个[MCVE]显示这个问题吗? – Itai

+0

看看我编辑的答案。 –

+0

对我感到羞耻我想我出....所有的时间我使用错误的子类... –

回答

1

我不是100%确定这是必要的,但是按照惯例,伪类选择器类选择后添加:

.button.close-button:selected { 
    -fx-background-color: greenyellow; 
} 

但是没有用于Button没有selected伪类。它可用于CheckBoxToggleButton,但不适用于常规的Button s。可用的伪古铜是:pressed:hover,see css reference

你当然可以自己添加的伪类,假设你使用JavaFX 8:

PseudoClass selected = PseudoClass.getPseudoClass("selected"); 

close.setOnAction((event) -> { 
    .... 
    close.pseudoClassStateChanged(selected, true); 
});