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) –
私はおそらく、あなたがやっていることや、アプリケーションの構造をどのようにしているのかといったこの質問に、より多くの情報を含める必要があります。 –