JavaFX 응용 프로그램을 빌드 중이며 JavaFX UI에서 인수로 전달 된 값에 액세스하려고합니다. 어떤 이유로 든 기본 메소드 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();
}
}
이제 문제는 내가 시도하고
createGridPane
방법 내에서
stockData
객체에서 값에 액세스 할 때, 값이 사용할 수없는 것입니다.
예
this.stockData.getStocks().size()
createGridPane
방법에서 0의 값을 제공한다. 그러나
launchForm
메서드에서 2의 값을 제공합니다.
다시 launchForm
있어서의 값을 반환 "Retail"
this.stockData.getStocks().get(0).getSector()
같은 다른 값이 존재한다. 그러나 동일한 클래스의 다른 메소드에서 동일한 메소드에 액세스하려고하면 예외가 발생합니다.
누군가 나를 도와 줄 수 있습니까?
어디에서'launchForm'을 호출합니까? 그리고 왜 그 메소드 내부에서'launch()'를 호출하고 있습니까? ['launch()'] (http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#launch-java.lang.String...-)는 응용 프로그램을 시작합니다. 확실히 그 시점에서 응용 프로그램이 이미 시작되었습니다. JavaFX 라이프 사이클을 근본적으로 잘못 이해 했어야합니다. ['Application' docs] (http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html) –
나는 아마도 당신이하고있는 일에 관해서이 질문에 더 많은 정보를 포함시킬 필요가 있고 당신의 애플리케이션을 어떻게 구조화 했는지도 알 필요가 있습니다. –