0
setController에 고정되어 있습니다. 사용자 및 암호가 나는 새로운 장면을 열 곳입니다JavaFX, FXMLLoader.setController (컨트롤러)가 장면을로드하지 않습니다.
import java.io.IOException;
import java.sql.*;
import javafx.collections.*;
import javafx.event.Event;
import javafx.fxml.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class GiantsLoginController {
public String dataName, serverName, password;
public int num;
private Connection connect = null;
private Statement stmt = null;
private boolean userPass, connected;
private Connections connection;
@FXML
private ComboBox<String> sType;
@FXML
public TextField dbName;
@FXML
private TextField sName;
@FXML
private Button loginB;
@FXML
private PasswordField sPassword;
@FXML
private Pane paneL;
@FXML
private GridPane gPane;
@FXML
private ComboBox<String> uType;
ObservableList<String> sLists = FXCollections.observableArrayList("MySQL LOCAL",
"MYSQL REMOTE", "SQL SERVER LOCAL", "SQL SERVER");
ObservableList<String> uList = FXCollections.observableArrayList("Player",
"Admin");
@FXML
public void initialize() {
sType.setItems(sLists);
uType.setItems(uList);
}
@FXML
public void loginBClick (Event event) {
if (isAllFieldFillup()) {
switch(uType.getValue().trim()) {
case "Admin":
if (connectCheck()) {
try {
changeStage(GiantsLogin.getPrimaryStage());
}
catch (Exception e) {
}
}
case "Player":
if (connectCheck()) {
try {
}
catch (Exception e) {
}
}
}
}
}
public void changeStage(Stage stage) throws IOException {
GiantsAdminController controller = new GiantsAdminController("Hello World!");
FXMLLoader loader = FXMLLoader.load(getClass().getResource("GiantsAdmin.fxml"));
loader.setController(controller);
stage.hide();
stage.setScene(new Scene((Pane) loader.load()));
stage.show();
}
public void closeConnection() {
if (connect != null) {
try {
stmt.close();
connect.close();
}
catch (SQLException e) {
}
}
}
public boolean connectCheck() {
connected = false;
dataName = dbName.getText();
serverName = sName.getText();
password = sPassword.getText();
switch (sType.getValue()) {
case "MySQL LOCAL":
num = 1;
break;
case "MYSQL REMOTE":
num = 2;
break;
case "SQL SERVER LOCAL":
num = 3;
break;
case "SQL SERVER":
num = 4;
break;
default:
}
if (connect == null) {
connect = Connections.getconnect(num, dataName, serverName, password);
}
if (connect == null) {
System.out.println("Still no connection");
}
if (stmt == null) {
try {
stmt = connect.createStatement();
connected = true;
} catch (SQLException e) {
Alert notify = new Alert(Alert.AlertType.INFORMATION);
notify.setTitle("Blank filed");
notify.setHeaderText(null);
notify.setContentText("Incorrect login.");
notify.showAndWait();
connected = false;
}
}
return connected;
}
private boolean isAllFieldFillup() {
boolean allInfo;
if (sType.getValue().equals("server type") && dbName.getText().isEmpty()
&& sName.getText().isEmpty() && sPassword.getText().isEmpty()) {
Alert notify = new Alert(Alert.AlertType.INFORMATION);
notify.setTitle("Blank filed");
notify.setHeaderText(null);
notify.setContentText("You are missing some information.");
notify.showAndWait();
allInfo = false;
}
else {
allInfo = true;
}
return allInfo;
}
}
입력하고 나는 새로운 장면에 액세스 할 수 이 될 수 있도록 내 컨트롤러를 설정할 때이 장면을로드하지 않습니다. 그러나 나는 사용자 이름과 암호를 입력하고 로그인을 클릭하면 계속 얼어 붙었습니다.
public void changeStage(Stage stage) throws IOException { GiantsAdminController controller = new GiantsAdminController("Hello World!"); FXMLLoader loader = FXMLLoader.load(getClass().getResource("GiantsAdmin.fxml")); loader.setController(controller); stage.hide(); stage.setScene(new Scene((Pane) loader.load())); stage.show(); }
나는 changeStage 방법이 메서드를 호출하고 곳입니다
public void loginBClick (Event event) { if (isAllFieldFillup()) { switch(uType.getValue().trim()) { case "Admin": if (connectCheck()) { try { changeStage(GiantsLogin.getPrimaryStage()); } catch (Exception e) { } } case "Player": if (connectCheck()) { try { } catch (Exception e) { } } } } }
이 내 메인 클래스
import java.io.IOException; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.*; public class GiantsLogin extends Application { private static Stage stage; @Override public void start(Stage stage) throws IOException { setPrimaryStage(stage); Parent root = FXMLLoader.load(getClass().getResource("GiantsLogin.fxml")); Scene scene = new Scene(root); scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm()); stage.setScene(scene); stage.setTitle("Giants Login"); stage.show(); } public static void setPrimaryStage(Stage primaryStage) { stage = primaryStage; } public static Stage getPrimaryStage() { return stage; } public static void main(String[] args) { launch(args); } }
입니다 이것은 내 두 번째 창입니다 : 이것은 가정 창입니다 사용자 이름과 패스가 올 바르면 을여십시오.
import java.io.IOException; import java.sql.Statement; import javafx.collections.*; import javafx.event.Event; import javafx.fxml.*; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.stage.Stage; public class GiantsAdminController { @FXML private Button connect = null; private boolean connected; private Statement stmt; @FXML private TextField aRank; public GiantsAdminController(String message) { System.out.println("You said: " + message); } public GiantsAdminController() { } ObservableList<String> sLists = FXCollections.observableArrayList("MySQL LOCAL", "MYSQL REMOTE", "SQL SERVER LOCAL", "SQL SERVER"); @FXML public void initialize() { serverType.setItems(sLists); } @FXML public void clearBClick (Event event) { aRank.clear(); aName.clear(); aPosition.clear(); aSchool.clear(); aAge.clear(); aWar.clear(); } @FXML public void SingOutClick(Event event) throws IOException { Parent giantsLogin = FXMLLoader.load(getClass().getResource("/giants/GiantsLogin.fxml")); Scene gLScene = new Scene(giantsLogin); gLScene.getStylesheets().add(getClass().getResource("style.css").toExternalForm()); stage.setScene(gLScene); stage.show(); } }
나는이 문제를 해결하기 위해 모든 노력,하지만 행운.
방금했습니다. 그리고 이제는 더 이상 동결하지 않습니다. 그러나 두 번째 장면이 열리지 않습니다 – Jabateh
BTW, 사용자가 palyer – Kachna
일 때 changeStage() 메서드를 호출하지 않은 것으로 나타났습니다. 나는 그저 관리자가 먼저 작업하고 있는지 확인하고 싶다. 바스트는 여전히 두 번째 장면을 얻지 못합니다. 당신은 그것을 다시보고 왜 스콘 장면이 열리지 않는지 볼 수 있습니까? 부디 – Jabateh