Я пытаюсь использовать кнопки для переключения сцены на сцене. Начальная сцена — это экран входа в систему, и у меня нет проблем с переходом оттуда к сцене панели управления. Проблема возникает, когда я вызываю метод clickAccount.
Я проверил, что fxid правильный, и все файлы fxml будут загружаться правильно, если я инициализирую их как первую сцену.
package ui;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import logic.UserDriver;
import java.io.IOException;
public class BudgetApplication extends Application {
public UserDriver userDriver;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
// Initialize UserDriver
userDriver = new UserDriver();
// Load FXML and get controller
FXMLLoader loader = new FXMLLoader(getClass().getResource("login.fxml"));
Parent root = loader.load();
// Load dashboard FXML
FXMLLoader dashboardLoader = new FXMLLoader(getClass().getResource("dashboard.fxml"));
Parent dashboardRoot = dashboardLoader.load();
// Initialize dashboardScene
Scene dashboardScene = new Scene(dashboardRoot, 1280, 720);
//Load account FXML
FXMLLoader accountLoader = new FXMLLoader(getClass().getResource("accounts.fxml"));
Parent accountRoot = accountLoader.load();
//Initialize accountScene
Scene accountScene = new Scene(accountRoot, 1280, 720);
// Get the controller instance and set up dependencies
BudgetController controller = loader.getController();
controller.setUserDriver(userDriver); // Pass userDriver to the controller
controller.setStage(primaryStage); // Pass the stage to the controller if needed
controller.setDashboardScene(dashboardScene); // Pass dashboardScene to controller
controller.setAccountScene(accountScene); //Pass accountScene to controller
// Set the primary scene
Scene loginScene = new Scene(root, 500, 300);
primaryStage.setScene(loginScene);
primaryStage.setTitle("JavaBucks");
primaryStage.setOnCloseRequest(e -> controller.windowClose("UserInfo.ser"));
primaryStage.show();
}
}
package ui;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import logic.UserDriver;
import java.io.IOException;
public class BudgetController {
@FXML public TextField usernameTF;
@FXML public TextField passwordTF;
@FXML public Button loginButton;
@FXML public Button accountButton;
private UserDriver userDriver;
private Stage stage;
private Scene dashboardScene;
private Scene accountScene;
private Parent root;
// Setters to pass data from BudgetApplication
public void setUserDriver(UserDriver userDriver) {
this.userDriver = userDriver;
}
public void setStage(Stage stage) {
this.stage = stage;
System.out.println("Stage set in controller: " + (stage != null));
}
public void setDashboardScene(Scene dashboardScene){
this.dashboardScene = dashboardScene;
}
public void setAccountScene(Scene accountScene){
this.accountScene = accountScene;
}
@FXML
public void clickLogin(ActionEvent event) throws IOException {
String username = usernameTF.getText();
String password = passwordTF.getText();
// Debug output
System.out.println("Username: " + username);
System.out.println("Password: " + password);
// Validate login
if (userDriver != null && userDriver.validateLogin(username, password)) {
System.out.println("Login successful!");
usernameTF.clear();
passwordTF.clear();
stage.setScene(dashboardScene);
} else {
System.out.println("Login failed.");
usernameTF.clear();
passwordTF.clear();
}
}
@FXML
public void clickAccount() {
System.out.println("Button binded");
stage.setScene(accountScene);
}
public void windowClose(String filename) {
userDriver.writeToFile(filename);
System.out.println("Data saved to " + filename);
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ne-because
JavaFX (невозможно вызвать «javafx.stage.Stage.setScene(javafx.scene.Scene)», поскольку «this.stage» имеет значение null ⇐ JAVA
Программисты JAVA общаются здесь
1730196430
Anonymous
Я пытаюсь использовать кнопки для переключения сцены на сцене. Начальная сцена — это экран входа в систему, и у меня нет проблем с переходом оттуда к сцене панели управления. Проблема возникает, когда я вызываю метод clickAccount.
Я проверил, что fxid правильный, и все файлы fxml будут загружаться правильно, если я инициализирую их как первую сцену.
package ui;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import logic.UserDriver;
import java.io.IOException;
public class BudgetApplication extends Application {
public UserDriver userDriver;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
// Initialize UserDriver
userDriver = new UserDriver();
// Load FXML and get controller
FXMLLoader loader = new FXMLLoader(getClass().getResource("login.fxml"));
Parent root = loader.load();
// Load dashboard FXML
FXMLLoader dashboardLoader = new FXMLLoader(getClass().getResource("dashboard.fxml"));
Parent dashboardRoot = dashboardLoader.load();
// Initialize dashboardScene
Scene dashboardScene = new Scene(dashboardRoot, 1280, 720);
//Load account FXML
FXMLLoader accountLoader = new FXMLLoader(getClass().getResource("accounts.fxml"));
Parent accountRoot = accountLoader.load();
//Initialize accountScene
Scene accountScene = new Scene(accountRoot, 1280, 720);
// Get the controller instance and set up dependencies
BudgetController controller = loader.getController();
controller.setUserDriver(userDriver); // Pass userDriver to the controller
controller.setStage(primaryStage); // Pass the stage to the controller if needed
controller.setDashboardScene(dashboardScene); // Pass dashboardScene to controller
controller.setAccountScene(accountScene); //Pass accountScene to controller
// Set the primary scene
Scene loginScene = new Scene(root, 500, 300);
primaryStage.setScene(loginScene);
primaryStage.setTitle("JavaBucks");
primaryStage.setOnCloseRequest(e -> controller.windowClose("UserInfo.ser"));
primaryStage.show();
}
}
package ui;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import logic.UserDriver;
import java.io.IOException;
public class BudgetController {
@FXML public TextField usernameTF;
@FXML public TextField passwordTF;
@FXML public Button loginButton;
@FXML public Button accountButton;
private UserDriver userDriver;
private Stage stage;
private Scene dashboardScene;
private Scene accountScene;
private Parent root;
// Setters to pass data from BudgetApplication
public void setUserDriver(UserDriver userDriver) {
this.userDriver = userDriver;
}
public void setStage(Stage stage) {
this.stage = stage;
System.out.println("Stage set in controller: " + (stage != null));
}
public void setDashboardScene(Scene dashboardScene){
this.dashboardScene = dashboardScene;
}
public void setAccountScene(Scene accountScene){
this.accountScene = accountScene;
}
@FXML
public void clickLogin(ActionEvent event) throws IOException {
String username = usernameTF.getText();
String password = passwordTF.getText();
// Debug output
System.out.println("Username: " + username);
System.out.println("Password: " + password);
// Validate login
if (userDriver != null && userDriver.validateLogin(username, password)) {
System.out.println("Login successful!");
usernameTF.clear();
passwordTF.clear();
stage.setScene(dashboardScene);
} else {
System.out.println("Login failed.");
usernameTF.clear();
passwordTF.clear();
}
}
@FXML
public void clickAccount() {
System.out.println("Button binded");
stage.setScene(accountScene);
}
public void windowClose(String filename) {
userDriver.writeToFile(filename);
System.out.println("Data saved to " + filename);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79136702/javafx-cannot-invoke-javafx-stage-stage-setscenejavafx-scene-scene-because[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия