2014-03-19 5 views
0

간단한 탐색 기능이있는 응용 프로그램을 구현하려고합니다. 하나의 메인 메뉴, 3 개의 서브 메뉴, 각각 다른 3 개의 서브 메뉴.JavaFX, 같은 창에서 화면 열기

메인 메뉴를 루트 스크린으로 사용하여 동일한 하위 창에서 모든 하위 메뉴를 반복적으로 열어야하는 응용 프로그램이 필요합니다. 각 하위 메뉴의 "뒤로"버튼을 통해 해당 메뉴로 돌아갈 수 있어야합니다.

각 (!) 메뉴 및 하위 메뉴에 대해 Main 클래스, Controller 클래스 및 FXML 파일을 구현했습니다.

예. 내 메인 메뉴

 package application; 

import org.apache.log4j.Logger; 
import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 

public class Main extends Application { 

    // Initialize Logger 
    private static final Logger logger = Logger.getLogger(Main.class); 

    @Override 
    public void start(Stage primaryStage) 
    { 
     try 
     { 
      AnchorPane root = (AnchorPane)FXMLLoader.load(getClass().getResource("MainFrame.fxml")); 
      Scene scene = new Scene(root,1000,500); 

      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) 
    { 
     logger.info("Starting application."); 
     launch(args); 
    } 
} 

내 MainController

package application; 

import org.apache.log4j.Logger; 


import javafx.application.Platform; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

public class MainFrameController 
{ 

    private static final Logger logger = Logger.getLogger(MainFrameController.class); 

    @FXML 
    private Button btn_random1; 
    @FXML 
    private Button btn_random2; 
    @FXML 
    private Button btn_random3; 
    @FXML 
    private Button btn_random4; 

    public void initialize() 
    { 
     //mainService = new MainService(); 
    } 

    @FXML 
    private void onRandomButton1() throws Exception 
    { 
     logger.info("onRandomButton1Clicked"); 

     Stage stage = new Stage(); 
     AnchorPane root; 
     root = (AnchorPane)FXMLLoader.load(getClass().getResource("RandomFXML1.fxml")); 
     Scene scene = new Scene(root,1000,500); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    @FXML 
    private void onRandomButton2() 
    { 
     logger.info("onRandomButton1"); 
    } 

    @FXML 
    private void onRandomButton3() 
    { 
     logger.info("onRandomButton2"); 

    } 
    @FXML 
    private void onRandomButton4() 
    { 
     Platform.exit(); 
     logger.info("onRandomButton3"); 
    } 
} 

는 같은 창에서 열리지 않습니다 때문에 단순히 코드를 변경하는 방법이 있나요?

나는이 문제를 해결하는 비교적 복잡한 방법으로 몇 가지 자습서를 보았습니다. 코드를 변경하고 너무 많이 변경하지 말고, 그렇지 않으면 다시 시작해야 할 것입니다.

많은 Main/Controller/FXML 조합 중 하나 일뿐입니다. 약 10 개의 화면과 "자막"이 있습니다 (자바가 새 창을 여는 방식).

아이디어 누구? 아니면 상대적으로 간단한 튜토리얼 (전체 코드를 변경하지 않아도 됨)?

감사합니다.

답변

0

루트 (또는 빈 앵커 패널 하나)에 빈 컨트롤러가 있고 다른 컨트롤러를 열고 현재 패널에 추가 할 수 있습니까?

현재 비슷한 설정이지만 탭 창이 있습니다. 각 모듈은 별도의 탭에로드됩니다. 각 모듈 자체에는 fxml 파일, 컨트롤러 등이 있습니다. 핵심 코드는 각 모듈에 대해 동적으로 새 탭을 만들고로드합니다.