Я создаю приложение JavaFX и хочу получить доступ к значениям, переданным в качестве аргумента в пользовательском интерфейсе JavaFX. По какой-то причине я не могу получить доступ к этим значениям во всех методах, кроме базового метода launchForm. Вот как выглядит мой код.Использование параметра в методах JavaFX
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();
}
}
Теперь вопрос заключается в том, что, когда я пытаюсь получить доступ к любому значению при stockData
объекте в методе createGridPane
значение не доступно.
Примерами являются
this.stockData.getStocks().size()
дает значение 0 в методе createGridPane
. Но он дает значение 2 в методе launchForm
.
Опять же существуют и другие значения, такие как
this.stockData.getStocks().get(0).getSector()
, которая возвращает значение "Retail"
в методе launchForm
. Но когда я пытаюсь получить доступ к тому же в другом методе в одном классе, я получаю исключение.
Может кто-нибудь, пожалуйста, помогите мне здесь?
Откуда вы вызываете 'launchForm'? И почему вы вызываете 'launch()' изнутри этого метода? ['launch()'] (http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#launch-java.lang.String...-) запускает приложение: конечно, приложение уже начато в этот момент. Я думаю, что вы, должно быть, неправильно поняли жизненный цикл JavaFX: см. Документы '' Application' (http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html) –
Я думаю, что вы вероятно, необходимо включить в этот вопрос больше информации о том, что вы делаете, и о том, как вы структурировали свое приложение. –