【问题标题】:Switching views/fxml on gluon Application在胶子应用程序上切换视图/fxml
【发布时间】:2023-01-02 05:32:09
【问题描述】:

我正在使用 JavaFX 开发 gluon 应用程序,但我不太了解如何通过单击按钮切换场景(或视图?)。 如果我单击下图中的“从文件加载”按钮,我的代码应该执行一些任务,然后它应该更改视图,加载我已添加到应用程序管理器的新 fxml。 Screenshoot

扩展应用程序的主类:

package com.knnapplication;

import com.knnapplication.views.ExampleView;
import com.knnapplication.views.PrimaryView;
import com.knnapplication.views.SecondaryView;
import com.gluonhq.charm.glisten.application.AppManager;
import com.gluonhq.charm.glisten.visual.Swatch;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

import static com.gluonhq.charm.glisten.application.AppManager.HOME_VIEW;

public class KNNApplication extends Application {

    public static final String PRIMARY_VIEW = HOME_VIEW;
    public static final String SECONDARY_VIEW = "Secondary View";
    public static final String EXAMPLE_VIEW = "Example View";

    private final AppManager appManager = AppManager.initialize(this::postInit);

    @Override
    public void init() {
        appManager.addViewFactory(PRIMARY_VIEW, () -> new PrimaryView().getView());
        appManager.addViewFactory(SECONDARY_VIEW, () -> new SecondaryView().getView());
        appManager.addViewFactory(EXAMPLE_VIEW, () -> new ExampleView().getView());

        DrawerManager.buildDrawer(appManager);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        appManager.start(primaryStage);
    }

    private void postInit(Scene scene) {
        Swatch.BLUE.assignTo(scene);

        scene.getStylesheets().add(KNNApplication.class.getResource("style.css").toExternalForm());
        ((Stage) scene.getWindow()).getIcons().add(new Image(KNNApplication.class.getResourceAsStream("/icon.png")));
    }

    public static void main(String args[]) {
        launch(args);
    }
}

处理按钮点击的事件

 @FXML
    void LoadFile(ActionEvent event) {

        //connection to server
        InetAddress addr;
        try {
            addr = InetAddress.getByName("127.0.0.1");

        } catch (UnknownHostException e) {
            System.out.println(e.toString());
            return;
        }

        Client c;
        try {
            c=new Client("127.0.0.1", 2025, label);
            /*
            HERE I SHOULD SWITCH VIEW
             */

            AppManager.getInstance().switchView("EXAMPLE_VIEW");


        }  catch (IOException e) {
            label.setText(e.toString());
            System.out.println(e.toString());
            return;
        } catch (NumberFormatException e) {
            label.setText(e.toString());
            System.out.println(e.toString());
            return;
        } catch (ClassNotFoundException e) {
            label.setText(e.toString());
            System.out.println(e.toString());
            return;
        }

        //label.setText("KNN caricato da file");
    }

在网上搜索我发现了这种方法,使用这行代码“ AppManager.getInstance().switchView("EXAMPLE_VIEW");”,但它仍然不起作用,我不太明白它是如何实现的作品。

我希望你能帮助我。太感谢了!

【问题讨论】:

  • 你试过 Gluon samples 了吗? Notes示例是一个很好的用例,你可以看到完整的tutorial,还可以查看如何切换views

标签: javafx gluon gluonfx


【解决方案1】:

要加载新视图,您应该创建一个视图对象并加载 FXML/它上面的节点。比您可以通过调用 home.getAppManager().switchView("your view here") 调用该视图。就像下面的例子:

FloatingActionButton fab = new FloatingActionButton(MaterialDesignIcon.ADD.text,
            e -> home.getAppManager().switchView(ADDHUB_VIEW));
    fab.showOn(your view);

也像你一样,你需要将这个视图添加到 init 中的应用程序管理器

appManager.addViewFactory(YOUR_VIEW, () -> new YourView().getView());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多