首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让JavaFX显示API feed

如何让JavaFX显示API feed
EN

Stack Overflow用户
提问于 2018-10-02 23:42:03
回答 1查看 555关注 0票数 0

我的问题非常直截了当(我只是一个玩东西的休闲程序员)。我已经建立了到一个应用程序接口的连接,通过RxJava的魔力,我可以订阅这个应用程序接口发出的json数据。我还使用FXML创建了一个非常基本的GUI。

如何在每次通过订阅发出事件时更新TextArea = textAreaA中的文本?换句话说,我如何让TextArea显示API feed?

我从头到尾阅读了RxJavaFx指南,它似乎更多地关注Fx到Rx的定向事件流:(

下面是我的代码示例:

代码语言:javascript
复制
    public class Tester extends Application{

    private static final Logger LOG = LoggerFactory.getLogger(Tester.class);

    public static void main(String[] args) throws IOException, InterruptedException{

        launch(args);

    }

    public void start (Stage primaryStage) throws Exception {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
        Parent root = loader.load();

        primaryStage.setTitle("App Window");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();


        TESTER_API.TESTER_API_Connector();       


    }

}

    public class TESTER_API {

    public static void TESTER_API_Connector() throws IOException, InterruptedException {
        StreamingEvents emissions = StreamingEventsFactory.INSTANCE.createEvents(TheseStreamingEvents.class.getName());     
        emissions.connect().blockingAwait();
        emissions.getEvents().getSomethingSpecific()
        .subscribe(event -> System.out.println(event.getSomethingSpecific()) // Here is the event that I would like to bind or otherwise push to textAreaA in the FXML controller
        ,throwable -> new Exception("GUI error!"));

    }
}

    public class FXMLDocumentController implements Initializable {

    @FXML 
    public TextArea textAreaA;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        // TODO Auto-generated method stub

    }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 03:24:46

我的想法是让TESTER_APIFXMLDocumentController中调用一个更新textAreaA的函数。我建议使用Platform.runLater()来确保线程安全。

代码语言:javascript
复制
public class Tester extends Application{
[...]

public void start (Stage primaryStage) throws Exception {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
    Parent root = loader.load();

    FXMLDocumentController controller = loader.getController();

    primaryStage.setTitle("App Window");
    primaryStage.setScene(new Scene(root, 300, 275));
    primaryStage.show();


    TESTER_API.TESTER_API_Connector(controller);       
}

}

代码语言:javascript
复制
public class TESTER_API {

public static void TESTER_API_Connector(FXMLDocumentController controller) throws IOException, InterruptedException {
    [...]
    emissions.getEvents().getSomethingSpecific()
    .subscribe(event -> Platform.runLater(() -> {
        controller.updateTextArea(event.getSomethingSpecific());
    }),
    throwable -> new Exception("GUI error!"));

}

}

代码语言:javascript
复制
public class FXMLDocumentController implements Initializable {

    @FXML 
    public TextArea textAreaA;

    [...]
    public void updateTextArea(String string) {
        textAreaA.setText(string);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52611839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档