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

Odpowiedz Nowy wątek
2018-11-16 22:51
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("[email protected]@ " + 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");      
        }   
    }

Pozostało 580 znaków

2018-11-17 23:15
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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