我正在构建一个 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
方法本身创建,并且正是这个新实例与 init
和 start
一起使用。
解决此问题的最简单方法是,如果您可以在 init
或 start
中创建 Stocks
(可能将一些字符串传递为启动
的参数)。
否则,您需要一些其他方式与新创建的 Application
子类实例进行通信,例如静态
成员...
关于java - 在 JavaFX 方法中使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922221/