java - 在 JavaFX 方法中使用参数

标签 java javafx

我正在构建一个 JavaFX 应用程序,并且想要访问作为 JavaFX UI 中的参数传递的值。由于某种原因,我无法在除基本方法 launchForm 之外的所有方法中访问这些值。这是我的代码的样子。

public class FormBuilder extends Application {

    /*
     * (non-Javadoc)
     * @see javafx.application.Application#start(javafx.stage.Stage)
     * Scene scene
     *      Group root
     *          BorderPane borderPane
     *              TabPane tabPane
     *                  Tab stocksTab
     *                      BorderPane stockTabBorderPane
     *                          GridPane gridPane
     *          
     */

    private Stocks stockData = new Stocks();
    private int size;

    @Override
    public void start(Stage stage) throws Exception {
        stage.setTitle("Stock Manager");
        Group root = new Group();
        Scene scene = new Scene(root, 1024, 800, Color.WHITE);

        TabPane tabPane = new TabPane();
        BorderPane borderPane = new BorderPane();
        BorderPane stockTabBorderPane = new BorderPane();

        Tab stocksTab = new Tab("Stocks");

        stockTabBorderPane.setTop(this.addHBox());
        stockTabBorderPane.setCenter(this.createGridPane());

        stocksTab.setContent(stockTabBorderPane);
        tabPane.getTabs().add(stocksTab);

        borderPane.setCenter(tabPane);

        borderPane.prefHeightProperty().bind(scene.heightProperty());
        borderPane.prefWidthProperty().bind(scene.widthProperty());

        root.getChildren().add(borderPane);


        stage.setScene(scene);
        stage.show();


    }

    private HBox addHBox() {
        HBox hbox = new HBox();
        hbox.setPadding(new Insets(15, 12, 15, 12));
        hbox.setSpacing(10);
        hbox.setStyle("-fx-background-color: #336699;");

        Button buttonCurrent = new Button("Current");
        buttonCurrent.setPrefSize(100, 20);

        Button buttonProjected = new Button("Projected");
        buttonProjected.setPrefSize(100, 20);
        hbox.getChildren().addAll(buttonCurrent, buttonProjected);

        return hbox;
    }

    private GridPane createGridPane() {

        GridPane gridPane = new GridPane();

        gridPane.setLayoutX(39);
        gridPane.setLayoutY(131.0);
        gridPane.setAlignment(Pos.TOP_CENTER);
        gridPane.setVgap(5.0);
        gridPane.setHgap(10.0);

        gridPane.add(new Label("Active"), 1,1);
        gridPane.add(new Label("Stock"), 2, 1);
        gridPane.add(new Label("Symbol"), 3, 1);
        gridPane.add(new Label("LPP"), 4, 1);
        gridPane.add(new Label("LPP"), 5, 1);
        gridPane.add(new Label("HPP"), 6, 1);
        gridPane.add(new Label("LTP"), 7, 1);

        System.out.println(this.size);
        for(int v=2;v < this.stockData.getStocks().size()+2; v++) {
            gridPane.add(new CheckBox(), 1, v);
            gridPane.add(new Label("Amazon"), 2, v);
            gridPane.add(new TextField (), 3,v);
            gridPane.add(new TextField (), 4,v);
            gridPane.add(new TextField (), 5,v);
            gridPane.add(new TextField (), 6,v);
            gridPane.add(new TextField (), 7,v);

        }

        return gridPane;
    }

    public void launchForm(Stocks stockData) {
        this.stockData = stockData;
        this.size = stockData.getStocks().size();
        System.out.println(stockData.getStocks().size());
        System.out.println(stockData.getStocks().get(0).getSector());
        launch();
    }
}

现在的问题是,当我尝试在 createGridPane 方法中访问 stockData 对象下的任何值时,这些值不可用。

例子是

this.stockData.getStocks().size()createGridPane 方法中给出值 0。但它在 launchForm 方法中给出的值为 2。

还有其他值,例如

 this.stockData.getStocks().get(0).getSector()

它在 launchForm 方法中返回值“Retail”。但是当我尝试在同一个类中的不同方法中访问相同的内容时,出现异常。

有人可以帮我吗?

最佳答案

您在 launchForm 实例方法中调用 Application.launch,并期望它使用调用此方法的实例作为应用程序类。

然而,JavaFX 启动并非以这种方式进行。

如果调用 Application.launch,则调用该方法的类的实例将由 launch 方法本身创建,并且正是这个新实例与 initstart 一起使用。

解决此问题的最简单方法是,如果您可以在 initstart 中创建 Stocks (可能将一些字符串传递为启动的参数)。

否则,您需要一些其他方式与新创建的 Application 子类实例进行通信,例如静态成员...

关于java - 在 JavaFX 方法中使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922221/

相关文章:

JavaFX 8 - 相对于鼠标指针缩放

java - 使用 setter 和 getter 分配从数据库中选取的数据

java - Java Swing 应用程序中的简单 JavaFX WebView 不显示内容

java - 在向布局添加按钮时获取 java.lang.reflect.InvocationTargetException

java - 为什么 StringProperty[值 : ""] is displayed in my table

java - AspectJ:如何将方面库编织到 Java 项目中

Java SwingWorker 锁定 GUI

java - Spring MVC错误验证错误

version - 检查运行时使用的 JRE 版本

java - 使用传递给线程的 Socket 时出现 "Socket is closed"异常?