2017-05-22 1 views
0

저는 독자적으로 JavaFx를 배우고 있으며 아직 FXML에 도달하지 않았습니다. 사용자가 두 번째 장면에서 자격 증명을 입력 한 후 응용 프로그램의 기본 장면으로 돌아갈 계획 인 한 응용 프로그램에 갇혀 있습니다. 나는 메인에서 두 번째 장면을 가져올 수 있었지만 두 번째 장면에서 메인 장면으로 갈 수 없었다. 나는 getter를 사용하여 메인 장면과 창을 얻으려고했지만 행운이 없었다. 너희들이 올바른 방법으로 가르 칠 수 있니?JavaFX : FXML없이 기본 페이지로 돌아 가기

미리 감사드립니다.

public class Landing extends Application { 
    BorderPane bp; 
    Scene scene; 
    @Override 
    public void start(Stage primaryStage) throws Exception { 
     primaryStage.setTitle("Welcome to our Telco!"); 
     bp = new BorderPane(); 
     VBox vbox = new VBox(); 
     Button login = new Button("Login"); 
     login.setMinWidth(100); 

     Button acc = new Button("Account Information"); 
     acc.setMinWidth(100); 

     vbox.getChildren().addAll(acc); 

     bp.setCenter(vbox); 

     acc.setOnAction(e ->{ 
      AccountInfo account = new AccountInfo(); 
      primaryStage.setTitle("Account Information"); // Set the stage title 
      primaryStage.getScene().setRoot(account.getbp());; // Place the scene in the stage  
     }); 

     scene = new Scene(bp, 750, 550); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
    public Pane getbp() { 
     return bp; 
    } 
    public Scene getSc(){ 
     return scene; 
    } 

버튼

public class AccountInfo { 
    BorderPane pane; 
    Landing main = new Landing(); 
    Scene scene; 
    AccountInfo() { 
     Button c = (new Button("Back")); 
     c.setStyle("-fx-background-color: pink"); 
     c.setOnAction((ActionEvent e) -> { 
     main.getbp(); 
     main.getSc(); 
    }); 
    public Pane getbp() { 
     return pane; 
    } 
} 
+1

당신이 자격 증명을 입력 할 수있는 간단한 대화 상자입니다 필요 할 수 있습니다, 당신이 그 대화 이후 – Oswald

+0

감사합니다 당신을 다시 @Oswald을 닫을 수 있습니다. 나는 그 가능성을 더 깊이 탐구 할 것이다. – Ddz

답변

1

Landing 장면은, 그것이 Application이다 아니다의 주요 장면을 얻을 수 있습니다. 지금까지 보여준 것과는 달리 전체 응용 프로그램에는 하나의 장면 만 있습니다. 동일한 JavaFX 응용 프로그램 수명 동안 Application 클래스의 인스턴스를 두 개 이상 인스턴스화 (그리고 연속 실행)하려고 시도하면 안됩니다. AccountInfo 클래스에서 Landing main = new Landing();을 할 때 위험 할 수 있습니다. Application.launch에 대한 Javadoc에서

:

예외 : IllegalStateException -이 방법은 한 번 이상 라고합니다.

필요한 것은 로그인 용 첫 번째 장면 (즉, 자격 증명 입력)입니다. 로그인이 성공하면 새로운 장면 개체를 만들고 그 장면을 다음 "보기"로 채운 다음 해당 새 장면을 스테이지로 설정합니다.

public class Landing extends Application { 
    BorderPane bp; 
    Scene scene; 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     primaryStage.setTitle("Welcome to our Telco!"); 
     bp = new BorderPane(); 
     VBox vbox = new VBox(); 
     Button login = new Button("Login"); 
     login.setMinWidth(100); 

     Button acc = new Button("Account Information"); 
     acc.setMinWidth(100); 

     vbox.getChildren().addAll(acc); 

     bp.setCenter(vbox); 

     acc.setOnAction(e -> { 
      primaryStage.setTitle("Account Information"); // Set the stage title 
      BorderPane infoScenePane = new BorderPane(); 
      Scene infoScene = new Scene(infoScenePane); 
      primaryStage.setScene(infoScene); 
     }); 

     scene = new Scene(bp, 750, 550); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 
+0

고맙습니다. @Jai,이 계시가 실제로 내가 믿는 것이 더 쉬워졌습니다. 내가하고있는 일을 처리하고 응용 프로그램을 전환했기 때문에 응용 프로그램간에 값을 전달할 수 없기 때문에 문제가 발생했습니다 .Changing 오직 장면만으로 그 문제를 해결할 수 있습니까? 하지만, 왜 하나 이상의 응용 프로그램을 가질 수 없는지 알고 싶습니다. – Ddz

+0

@Ddz 각 응용 프로그램은 Java VM의 인스턴스입니다 (즉, OS의 javaw 프로세스). 프로세스의 주 스레드가 FX 응용 프로그램 스레드이기 때문에 단일 프로세스 내에서 두 개의 응용 프로그램을 호스팅 할 수 없으며 공유 할 수 없습니다. – Jai

+0

@Ddz 일반적으로 동일한 창에서 내용을 변경하려는 경우 런타임에 장면 또는 부속 영역을 전환합니다. 다른 창에 새로운 내용을 표시하려면 다른 '단계'를 인스턴스화하고 그곳에서 물건을 수행하십시오. – Jai

관련 문제