如何侦听JavaFX节点上psuedo类中的更改
我假设我可以监听如何侦听JavaFX节点上psuedo类中的更改,java,javafx,javafx-8,Java,Javafx,Javafx 8,我假设我可以监听节点上的更改。getPseudoClassStates(),因为它属于observeSet类型,但是不会触发任何更改事件或失效 是否有其他方法可以侦听在节点上设置psuedo类的更改 public class PsuedoEvents extends Application { public static void main(String[] args) { launch(args); } @Override public vo
节点上的更改。getPseudoClassStates()
,因为它属于observeSet
类型,但是不会触发任何更改事件或失效
是否有其他方法可以侦听在节点上设置psuedo类的更改
public class PsuedoEvents extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
Button horse = new Button("horse");
horse.getPseudoClassStates().addListener(new InvalidationListener() {
@Override
public void invalidated(Observable arg0) {
System.out.println("invalidated " + arg0);
}
});
horse.getPseudoClassStates().addListener(new SetChangeListener<>() {
@Override
public void onChanged(Change<? extends PseudoClass> arg0) {
System.out.println("changed " + arg0);
}
});
stage.setScene(new Scene(new HBox(horse), 300, 300));
PseudoClass fooClass = PseudoClass.getPseudoClass("foo");
horse.setOnAction(event -> {
horse.pseudoClassStateChanged(fooClass, !horse.getPseudoClassStates().contains(fooClass));
System.out.println("Toggle state... " + horse.getPseudoClassStates());
});
stage.show();
}
}
公共类PsuedoEvents扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage)引发异常{
纽扣马=新纽扣(“马”);
horse.getPseudoClassState().addListener(新的InvalizationListener()){
@凌驾
公共无效无效(可观察arg0){
系统输出打印项次(“无效”+arg0);
}
});
horse.getpseudoClassState().addListener(新的SetChangeListener()){
@凌驾
public void onChanged(Change我已设法识别问题…getPseudoClassStates()
返回一个不可修改的包装
public final ObservableSet<PseudoClass> getPseudoClassStates() {
return FXCollections.unmodifiableObservableSet(pseudoClassStates);
}
这对我来说很有用…试过JDK1.8.0_161和JDK9.0.1谢谢检查,我用的是9.0。4@James_D这真是令人毛骨悚然,JavaFX中似乎没有任何变化,集合包装器始终使用弱引用,但在9.0.4中的行为有所不同……也许GC实现发生了变化……GC将是我的下一个猜测。
private ObservableSet<PseudoClass> states; // <=== strong ref
@Override
public void start(Stage stage) throws Exception {
Button horse = new Button("horse");
states = horse.getPseudoClassStates();
states.addListener(new InvalidationListener() {
@Override
public void invalidated(Observable arg0) {
System.out.println("invalidated " + arg0);
}
});