事件总线EventBus是帮助解决多controller,多Stage通信与传值问题
1. 工具类
import com.google.common.eventbus.EventBus;
/** 事件总线(单例模式)
* @Author cpf
* @Date 2023/9/9
*/
public class EventBusUtil {
private EventBusUtil(){
}
private final static EventBus eventBus = new EventBus();
public static EventBus getDefault(){
return eventBus;
}
}
2. 应用
public HomeController() {
EventBusUtil.getDefault().register(this);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
tabPane.getSelectionModel().select(2); // 设置默认选中的Tab为Tab 2
tabPane.getSelectionModel().selectedItemProperty().addListener((obs, oldItem, newItem) -> {
System.out.println("Tab changed from " + oldItem + " to " + newItem);
if (newItem.getId().equals("tab00")) {
EventBusUtil.getDefault().post(new HgBqImgSize());// 事件发送者
}
});
}
/**
* @Author cpf
* @Date 2023/10/18
*/
public class CuttingController {
public CuttingController() {
EventBusUtil.getDefault().register(this);
}
@Subscribe
public void eventHandling(HgBqImgSize imgSize){ // 事件接收者
dataLoading();
}
}
注意: 如果时间发送者传的数据类型是字符串, 则接收者接收方法是字符串类型的都可以接收到;