Я работаю над простым приложением для объектной базы данных, которое отображает различные атрибуты записей в классе в таблице и позволяет пользователю добавлять новую запись через дополнительное окно ввода.Странные проблемы с видимостью в приложении 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
, но это создает проблемы для других функций, которые я хочу добавить. Итак, мои вопросы:
Почему это даже появляется? Переменная
mainWindowController
объявлена в классеMain
, поэтому она должна быть видимой из любого места приложения, насколько мне известно.Как это решить; как мне заставить эту строку работать?
Там нет переменной называется 'mainWindowController' определено в' CreateDeveloperWindowController', так что вы получите сообщение об ошибке. –
Но не должен ли CreateDeveloperWindowController видеть его в основном классе? Даже если я импортирую его, он дает ошибку «нестатическая переменная не может ссылаться на статический контекст», которая может быть разрешена только путем объявления переменной static, что вызывает проблему, о которой я упоминал в вопросе, - она не может быть статичный, потому что он мешает другим вещам, которые я собираюсь добавить – Sargon1
* «Но не должен ли CreateDeveloperWindowController видеть его в основном классе?» * Нет, почему он его видит? Это просто не так, как работает Java (или, действительно, любой другой язык, о котором я знаю). –