Пытаетесь заставить приложение JavaFx работать, объекты перестают существовать? - PullRequest
0 голосов
/ 01 октября 2019

Так что я работаю над любимым проектом, по сути, оцифровываю книгу приключенческих ролей «Сделай сам».

Я перешел на использование Scenebuilder из-за свободы, которую он дает при создании графического интерфейса. У меня проблемы с привязкой данных к экрану. Кажется, объекты, которые я вызываю, либо перестают существовать, либо не являются теми, которые мне нужны.

Я использую базу данных SQLite для своих данных, и это, кажется, работает нормально. Я использую Maven для импорта нужных мне вещей, это также, кажется, работает нормально, однако для этого нужно, чтобы я использовал

public class DdAppLauncher {
    public static void main(String[] args) {
        DdApp2.main(args);
    }
}

в ->

public class DdApp2 extends Application {


    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("/fxml/mainWindow.fxml"));


        stage.setTitle("Deathtrap Dungeon");
        stage.setScene(new Scene (root, 800,600));
        stage.show();

    }

    public static void main(String[] args) {
        launch(args);

    }
}

. содержит кнопку запуска, которая обрабатывается следующим контроллером.

public class MainController {

    LocationsPool loc;
    Location currentLocation;

    @FXML
    private ListView<String> inventory;

    @FXML
    private Text locationDescription;

    @FXML
    private Text descrA;
    @FXML
    private Text descrB;
    @FXML
    private Text descrC;
    @FXML
    private Text descrD;
    @FXML
    private Text descrE;
    @FXML
    private Text descrF;


    @FXML
    public void startButtonClicked(ActionEvent event){

        try {
            System.out.println("Starting game");
            Stage stage = (Stage) ((Node)event.getSource()).getScene().getWindow();

            // Swap screen
            Parent root = FXMLLoader.load(getClass().getResource("/fxml/gameWindow.fxml"));
            stage.setScene(new Scene(root,800,600));
        } catch (IOException e) {
            e.printStackTrace();
        }

        //Setup
        loc = new LocationsPool();
        currentLocation = loc.getLocation(1);


        System.out.println(currentLocation.getDescription());

        locationDescription = new Text(currentLocation.getDescription());
        System.out.println(locationDescription.getText());
        System.out.println(locationDescription);

    }


    @FXML
    public void handleButtonA(){
        System.out.println(currentLocation==null);

    }
}

Вывод на консоль -> запуск игры

Шум ... (работает)

Шум... (работает)

При нажатии кнопки ->

True

Так что, кажется, приложение «забывает» поля при запуске? или это контроллер, который останавливает существующее и переделывается?

Кроме того, при попытке привязать данные к полям с помощью fx: id, кажется, что эти поля не связываются ни с чем, пока я не нажму эту кнопку.

Я все неправильно структурирую? Что я не получаю? Конечный продукт должен иметь загруженное описание и все варианты, загруженные для этого местоположения. Затем по выбору следует загрузить новое местоположение и новые варианты выбора, поэтому текст необходимо обновить.

Заранее спасибо. Кев

...