JavaFX Stage не будет отображаться в Android

Я развернул приложение JavaFX на Android с помощью плагина Gluon. То, что я пытаюсь сделать прямо сейчас, это показать вторую стадию, но, к сожалению, она не будет показана.

Вот код второго этапа:

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class Setting {

    public Setting(){
        Text title = new Text("Settings");
        title.setId("setting-title");
        title.setFont(Font.font("Arial", (int)(MainApp.HEIGHT * 0.04)));

        Label label_url = new Label("URL");
        label_url.setFont(Font.font("Arial", (int)(MainApp.HEIGHT * 0.03)));

        Label label_style = new Label("Style");
        label_style.setFont(Font.font("Arial", (int)(MainApp.HEIGHT * 0.03)));

        TextField text_url = new TextField(MainApp.URL);
        text_url.setFont(Font.font("Arial", (int)(MainApp.HEIGHT * 0.03)));

        ComboBox style_box = new ComboBox();
        style_box.setStyle("-fx-font-size:"+(int)(MainApp.HEIGHT * 0.03)+"px;");

        ObservableList<String> data = FXCollections.observableArrayList();
        data.add("Blue");
        data.add("Red");
        data.add("Yellow");
        style_box.setItems(data);

        GridPane grid = new GridPane();
        grid.setVgap(5);
        grid.setHgap(5);
        grid.add(label_url, 0, 0);
        grid.add(label_style, 0, 1);
        grid.add(text_url, 1, 0);
        grid.add(style_box, 1, 1);

        VBox root = new VBox();
        root.setAlignment(Pos.CENTER);
        root.getChildren().addAll(title,grid);

        Scene scene = new Scene(root, MainApp.WIDTH * 0.6, MainApp.HEIGHT * 0.4);

        if(MainApp.SETTING == null){
            MainApp.SETTING = new Stage();
            MainApp.SETTING.setScene(scene);
            MainApp.SETTING.initOwner(MainApp.MAINSTAGE);
            MainApp.SETTING.setTitle("Settings");
        }
    }

    public void show(){
        if(!MainApp.SETTING.isShowing()) MainApp.SETTING.show();
    }

 }

Этот код работает, когда я пытался запустить его как настольное приложение. Я использую Android 4.2.


person The Well    schedule 22.06.2015    source источник


Ответы (1)


Используя JavaFXPorts, вы можете менять сцены и этапы во время работы на Android.

Я изменил образец Gluon plugin по умолчанию для NetBeans, чтобы добиться этого, сначала переключение сцен :

private Scene mainScene;

@Override
public void start(Stage stage) {
    Rectangle2D visualBounds = Screen.getPrimary().getVisualBounds();

    Label label = new Label("Main Scene");        
    StackPane root = new StackPane(label);
    mainScene = new Scene(root, visualBounds.getWidth(), visualBounds.getHeight());

    stage.setScene(mainScene);
    stage.show();

    label.setOnMouseClicked(e->{
        Label labelSettings = new Label("Settings Scene. Click to go back");
        StackPane rootSettings = new StackPane(labelSettings);
        Scene settingsScene = new Scene(rootSettings, visualBounds.getWidth(), visualBounds.getHeight());
        stage.setScene(settingsScene);
        labelSettings.setOnMouseClicked(t->stage.setScene(mainScene));
    });
}

Теперь переключение этапов:

private Scene mainScene;

@Override
public void start(Stage stage) {
    Rectangle2D visualBounds = Screen.getPrimary().getVisualBounds();

    Label label = new Label("Main Stage");        
    StackPane root = new StackPane(label);
    root.setStyle("-fx-background-color: aquamarine;");
    mainScene = new Scene(root, visualBounds.getWidth(), visualBounds.getHeight());

    stage.setScene(mainScene);
    stage.setTitle("Main Stage");
    stage.show();

    label.setOnMouseClicked(e->{
        Label labelSettings = new Label("Settings Stage. Click to go back");
        StackPane rootSettings = new StackPane(labelSettings);
        rootSettings.setStyle("-fx-background-color: burlywood;");
        Scene settingsScene = new Scene(rootSettings, visualBounds.getWidth(), visualBounds.getHeight());
        Stage stage2 = new Stage();
        stage2.setScene(settingsScene);
        stage2.show();
        labelSettings.setOnMouseClicked(t->stage2.hide());
    });
}

И есть еще одна возможность: вы можете использовать Gluon Charm для управления различными представлениями.

Взгляните на этот проект, чтобы начать работу.

person José Pereda    schedule 22.06.2015