JavaFX Problem z przekazywaniem między kontrolerem i inną klasą

0

Witam!
Mam prostą aplikację w JavaFX. Ma ona na początek wyświetlać w oknie obiekty z tablicy, utworzone i umieszczone w niej wcześniej w losowej kolejności. Obiekty generowane i umieszczane tablicy są w klasie GeneratorKafli.. Próbuję więc przekazać (na razie tylko po jednym polu każdego obiektu) do kontrolera i wyświetlić w jednym z pól tekstowych, ale niestety nie działa. Wszystko wyświetla się poprawnie tylko w konsoli - najpierw tekst przekazany z klasy GeneratorKafli a potem tekst jaki został ustawiony w polu tekstowym(ten sam co przekazany z klasy GeneratorKafli) a w oknie gui pozostaje dalej domyślny tekst "test". Dlaczego tak się dzieje? Proszę o pomoc

Main

package application;
	
import java.io.IOException;

//import App.GeneratorKafli;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.fxml.FXMLLoader;


public class Main extends Application {
	
	
	@Override
	public void start(Stage primaryStage) {
		try {
			FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Sample.fxml"));
			Parent root = (Parent) fxmlLoader.load();
			SampleController fooController = ((SampleController) fxmlLoader.getController());
			fooController.setStage(primaryStage);
			Scene scene = new Scene(root,1024,768);
			scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) throws IOException {
		GeneratorKafli generator = new GeneratorKafli();
		generator.GenerujKafle4x4();
		generator.PokazKafle();	
		launch(args);
	
	}
	}


SampleController

package application;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Pos;
import javafx.scene.layout.TilePane;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
//import static application.GeneratorKafli.PokazKafle;

public class SampleController /*implements Initializable*/{
	
	
	@FXML
	private AnchorPane ap;
	@FXML
	public TilePane tilePane;
	@FXML
	private GridPane gridPane;
	@FXML 
	private TextField textField1;
	@FXML
	private TextField textField2;

	
	public void initialize(String data){
		System.out.print("Data: "+data + "| " );
		textField1.setText("OK@@ " + data);
		System.out.print(" TF: " + textField1.getText());	
	}
		
}

GeneratorKafli

	public void PokazKafle() throws IOException {
		
		FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Sample.fxml"));
	        Parent root = fxmlLoader.load();
		SampleController fooController = fxmlLoader.<SampleController>getController();	
		String d = "";
		
	for (int i=0; i<15; i++) {
			
	      d = kafle[i].getNazwa();	  
	      fooController.initialize(d);
	 
			//System.out.println(kafle[i].getId() + " " + kafle[i].getNazwa() + " " + kafle[i].getImage() + "\n");		
		}	
	}
0

W metodzie start ładujesz widok, następnie w metodzie PokazKafle() znów ładujesz widok, nie wyświetlasz go ale pobierasz z loadera instancję kontrolera przypisaną do tego widoku. No i potem w tym kontrolerze do widoku, który nigdzie się nie wyświetla coś ustawiasz i się dziwisz, że się cudownie nie objawiło. Tak być nie będzie.

Jak to naprawić - albo przekaż referencję do instancji właściwego kontrolera do Generatora Kafli albo na odwrót - po wyciągnięciu kontrolera z loader przekaż mu instancję generatora kafli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1