Это тоже мой первый пост.Это также мой первый проект с использованием JavaFX.Я пытаюсь вызвать небольшое всплывающее окно (вызывая какой-то ключ, такой как, например, F9), у которого будет TableView из текстового поля в главном окне.Сейчас я пытаюсь вызвать всплывающее окно с помощью кнопки в главном окне.Я, конечно, хочу вернуть значение из TableView обратно в главное окно, но это будет позже.У меня возникают проблемы, даже при вызове моего всплывающего окна.
Я уже рассмотрел различные примеры и решения, но не смог решить свою проблему.В конечном итоге я получу три всплывающих окна, вызываемых из моего главного окна.
У меня есть следующие файлы в моей архитектуре MVC:
- Main.java - (папка src / sample)
- StudentController.java - (папка src / sample / controller)
- StudentDAO.java и sexDAO.java (объект доступа к данным) -(папка src / sample / model)
- Student.java (общедоступный класс Student и конструктор) - (папка src / sample / model)
- DBUtil под util для OJDBC - (srcПапка / sample / util)
- Файлы FXML, созданные с помощью Scene Builder - (папка src / sample / view)
- RootLayout.fxml
- StudentView.fxml (Главное окно)
- GenderPopup.fxml (всплывающее окно с TableView, показывающим записи)
Main.java
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import java.io.IOException;
public class Main extends Application {
private Stage primaryStage;
private BorderPane rootLayout;
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Sample JavaFX App");
initRootLayout(); // Initialize RootLayout
showStudentView();
}
//Initializes the root layout.
public void initRootLayout() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/RootLayout.fxml"));
rootLayout = (BorderPane) loader.load();
Scene scene = new Scene(rootLayout);
primaryStage.setScene(scene);
primaryStage.show(); //Display the primary stage
} catch (IOException e) {
e.printStackTrace();
}
}
//Shows the Patient inside the root layout.
public void showStudentView() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/StudentView.fxml"));
AnchorPane PatientView = (AnchorPane) loader.load();
rootLayout.setCenter(PatientView);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
StudentController.java
package sample.controller;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class StudentController {
@FXML private TextField studentIdText;
@FXML private TextField lastNameText;
@FXML private TextField firstNameText;
@FXML private TextField sexText;
@FXML private Button popupButton;
@FXML
private void initialize () {
// I have additional listeners here doing different things that I have excluded which do pretty much similar things as shown below
sexText.focusedProperty().addListener((arg0, oldPropertyValue, newPropertyValue) -> {
if (!newPropertyValue) {
try {
searchSexDescription();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}
// Function to Search Sex Description
@FXML
private void searchSexDescription() throws ClassNotFoundException, SQLException {
try {
if (!sexText.getText().isEmpty()) {
// Get Gender Description
Patient sex = SexDAO.searchSex(sexText.getText());
populateAndShowSexDescription(sex);
}
} catch (SQLException e) {
System.out.println("Exception raised in searchSexDescription");
e.printStackTrace();
throw e;
}
}
@FXML
public void showGenderPopup() throws IOException {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("view/GenderPopup.fxml"));
Parent root = (Parent) fxmlLoader.load();
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
StudentView.fxml
Это главное окнокоторый есть кнопка, которую onAction вызывает showGenderPopup ()
Итак, на этом этапе моя Учебная запись выбирается в главном окне.Однако, когда я нажимаю кнопку «Всплывающее окно», чтобы попытаться вызвать всплывающее окно, я получаю сообщение об ошибке (Местоположение не указано).Теперь я знаю, что это не ошибка с именем файла, которая возникает с подобной ошибкой.Мой путь правильный, как и имя файла.Я предполагаю, что каким-то образом всплывающее окно, будучи ребенком, не может найти Родителя.Любая помощь очень ценится!
Ошибка: Вызывается: java.lang.IllegalStateException: Местоположение не установлено.
Спасибо