2016-04-07 2 views
0

Я работаю над простым приложением для объектной базы данных, которое отображает различные атрибуты записей в классе в таблице и позволяет пользователю добавлять новую запись через дополнительное окно ввода.Странные проблемы с видимостью в приложении JavaFX FXML

Главная:

public class Main extends Application { 

     Stage theStage; 
     Scene mainWindowController; 

     @Override 
     public void start(Stage primaryStage) throws Exception{ 
      theStage = primaryStage; 

      Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml")); 
      primaryStage.setTitle("Steam Database"); 

      mainWindowController = new Scene(root, 800, 550); 

      primaryStage.setScene(mainWindowController); 
      primaryStage.show(); 
     } 

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

Контроллер для одного из вторичных окон:

import static sample.MainWindowController.*; 

public class CreateDeveloperWindowController { 
/* 
*/ 
@FXML 
private TextField newDeveloperNameTextField; 

@FXML 
private TextField newDeveloperPassTextField; 

    private void handleCreateDeveloperButton() { 
     String proposedNewDevName = newDeveloperNameTextField.getText(); 
     String proposedNewDevPass = newDeveloperPassTextField.getText(); 
     if (proposedNewDevName.equals("") || proposedNewDevPass.equals("")) { 
      mainWindowController.textMessageDisplay.setText("Name and password must not be empty!"); 
     } else { 
      allDevelopers.add(new Developer(proposedNewDevName, proposedNewDevPass)); 
     } 

    } 
/* 
*/ 
} 

Проблема находится в контроллере, в строке

mainWindowController.textMessageDisplay.setText("Name and password must not be empty!"); 

Я получаю ошибка «Не удается разрешить символ», но я не могу понять, почему. Одним из решений является добавление «Main». перед ним и объявить переменную static, но это создает проблемы для других функций, которые я хочу добавить. Итак, мои вопросы:

  1. Почему это даже появляется? Переменная mainWindowController объявлена ​​в классе Main, поэтому она должна быть видимой из любого места приложения, насколько мне известно.

  2. Как это решить; как мне заставить эту строку работать?

+0

Там нет переменной называется 'mainWindowController' определено в' CreateDeveloperWindowController', так что вы получите сообщение об ошибке. –

+0

Но не должен ли CreateDeveloperWindowController видеть его в основном классе? Даже если я импортирую его, он дает ошибку «нестатическая переменная не может ссылаться на статический контекст», которая может быть разрешена только путем объявления переменной static, что вызывает проблему, о которой я упоминал в вопросе, - она ​​не может быть статичный, потому что он мешает другим вещам, которые я собираюсь добавить – Sargon1

+0

* «Но не должен ли CreateDeveloperWindowController видеть его в основном классе?» * Нет, почему он его видит? Это просто не так, как работает Java (или, действительно, любой другой язык, о котором я знаю). –

ответ

0

Вы действительно ошибаетесь, мой друг, вы настолько смущены переменными экземпляра и статическими переменными. В любом случае, вам нужно получить ссылку на первый класс, вот хороший пример https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx1

Смежные вопросы