我有以下课程ProtokollEvent

public class ProtokollEvent extends Event {

//variable holds all devices in given protokoll
private ObservableList<Device> devicesList;

//variable holds SaveResult
private SaveResult result;

//final ProtokollEvents
public static final EventType<ProtokollEvent> PROTOKOLL_SAVE = new EventType(ANY, "PROTOKOLL_SAVE");
public static final EventType<ProtokollEvent> PROTOKOLL_SAVE_DONE = new EventType(ANY, "PROTOKOLL_SAVE_DONE");
public static final EventType<ProtokollEvent> PROTOKOLL_UPDATED = new EventType(ANY, "PROTOKOLL_UPDATED");
public static final EventType<ProtokollEvent> PROTOKOLL_DELETED = new EventType(ANY, "PROTOKOLL_DELETED");

public ProtokollEvent() {
    this(PROTOKOLL_SAVE);
}

public ProtokollEvent(EventType<? extends Event> arg0) {
    super(arg0);
}

public ProtokollEvent(Object arg0, EventTarget arg1, EventType<? extends Event> arg2) {
    super(arg0, arg1, arg2);
}

/**
 * getDevices will return current {@link Device} as ObservableList
 *
 * @return {@link ObservableList} of type {@link Device}
 */
public ObservableList getDev() {
    return devicesList;
}
/**
 * setDevices will set devicesList
 * @param devices ObservableList {@link Device}
 */
public void setDev(ObservableList devices) {
    this.devicesList = devices;
}
/**
 * get the result which is returned from calling saveProtokoll
 * @return result {@link SaveResult}
 */
public SaveResult getResult() {
    return result;
}
/**
 * set the result which is returned after calling saveMessprotokoll in RestCall
 * @param result {@link SaveResult}
 */
public void setResult(SaveResult result) {
    this.result = result;
}


}

在第二节课

public class SaveUtils {

private MainWindowController controller;
private ObservableList<RowContainerPruefvorschriftController> rows;
private Protokoll lastSavedProtokoll;
private Protokoll currentSavingProtokoll;

public SaveUtils(MainWindowController control){
    this.controller = control;
}

private void startSaving(){
    currentSavingProtokoll = createProtokoll();
    boolean state = controller.networkOnline.get() ? saveOnline() :saveOffline();
}

public void setRows(ObservableList<RowContainerPruefvorschriftController> rows) {
    this.rows = rows;
    //if rows get set start saveing the data
    startSaving();
}

private boolean saveOffline(){
    return false;
}
private boolean saveOnline() {
    RestCall call = controller.getCall();
    //call saveMessprotokoll and look what SaveResult returns
    SaveResult result = call.saveMessprotokoll(currentSavingProtokoll);
    //create ProtokollEvent to tell all consumers if all was ok
    ProtokollEvent save = new ProtokollEvent(ProtokollEvent.PROTOKOLL_SAVE_DONE);
    save.setResult(result);
    //HOW to fire/dispatch the ProtokollEvent here??????
    //TODO: need to fire this event and listen for it in other classes
    if(result.getResult()>0){
        controller.setLoggerMessage("SavedOnline->Protokoll-Nr.:"+result.getProtokollnr());
    }
    else {
        controller.setLoggerMessage("SavedOnline not successful->Error:"+result.getError_message());
    }
    return true;
}


}

在saveOnline函数中,我创建一个ProtokollEvent并将其传递一些值。
我现在想要的是触发或调度此事件,以便其他代码部分可以侦听此事件。

我尝试使用fireEvent(),但据我所知,只有NODE,Windows和Scene才能使用Oracle-DOC。但是我该如何使用自定义类解决它?

另外我问自己,fireEvent和dispatchEvent有什么区别?

最佳答案

找到了解决方案。
所有事件都可以通过静态方法触发

Event.fireEvent(EventTarget eventTarget,Event event)


其中eventTarget指定事件将通过的路径(取自java docs)。
所以对于我的示例,我只添加了以下行

Event.fireEvent(controller.getMainWindowBorderPane(),save);


做到了...

09-10 09:35