2016-09-04 17 views
0

Я пытаюсь создать корневое меню вверху &, затем сделайте разделенный экран ниже.JavaFX root Menu & Split Screen в 1 дисплее

Я нашел здесь онлайн-сайт «http://code.makery.ch/library/javafx-8-tutorial/part1/». Это пример, который я пытаюсь сделать. Я хочу, чтобы жесткий код с реальными кодами, а не использовать некоторые перетаскивания, как он.

До сих пор я мог написать программу & показать меню через корень & запустить все, но я не могу понять, как добавить «Разделенный экран» под ним, не вызывая проблем.

Каждый раз, когда я пытаюсь добавить реализации с разделенным экраном вместе с меню в корне, оно не будет работать.

Я могу сделать это в JFrame, но я хочу, чтобы это было сделано в корне JavaFX.

Я не могу найти что-нибудь в Интернете по этому поводу, серьезно застрял в течение 4 часов.

This image is what I am trying to do.

(название проекта является "WorkAir") Вот мой текущий код:

package application; 

import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Orientation; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.CheckMenuItem; 
import javafx.scene.control.Label; 
import javafx.scene.control.Menu; 
import javafx.scene.control.MenuBar; 
import javafx.scene.control.MenuItem; 
import javafx.scene.control.RadioMenuItem; 
import javafx.scene.control.Separator; 
import javafx.scene.control.SeparatorMenuItem; 
import javafx.scene.control.ToggleGroup; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.StackPane; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 
import javafx.stage.WindowEvent; 

public class WorkAir extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     BorderPane root = new BorderPane(); 
     primaryStage.setTitle("WorkAir"); 

     Scene scene = new Scene(root, 1000, 550, Color.WHITE); 

     MenuBar menuBar = new MenuBar(); 
     menuBar.prefWidthProperty().bind(primaryStage.widthProperty()); 
     root.setTop(menuBar); 

     primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { 
      @Override 
      public void handle(WindowEvent t) { 
       System.out.println("Platform & System Exit"); 
       Platform.exit(); 
       System.exit(0); 
      } 
     }); 

     // File Menu 

     Menu fileMenu = new Menu("File"); 
     MenuItem newMenuItem = new MenuItem("New"); 
     MenuItem saveMenuItem = new MenuItem("Save"); 
     MenuItem exitMenuItem = new MenuItem("Exit"); 

     fileMenu.getItems().addAll(newMenuItem, saveMenuItem, 
      new SeparatorMenuItem(), exitMenuItem); 

     //File Menu Trees 

     exitMenuItem.setOnAction(new EventHandler<ActionEvent>() { 
      public void handle(ActionEvent event) { 

       //File Menu Trees Exit 
       Label secondLabel = new Label("Are you sure you want to exit?"); 
       Button buttonNo = new Button(); 

       buttonNo.setStyle("-fx-font: 10 arial; -fx-base: #d3d3d3;"); 
       buttonNo.setTranslateX(-55); 
       buttonNo.setTranslateY(30); 

       Button buttonYes = new Button(); 

       buttonYes.setStyle("-fx-font: 10 arial; -fx-base: #d3d3d3;"); 
       buttonYes.setTranslateX(+55); 
       buttonYes.setTranslateY(30); 

       buttonNo.setText("Exit, No"); 
       buttonNo.setOnAction(new EventHandler<ActionEvent>() { 
        @Override 
        public void handle(ActionEvent event) { 

         System.out.println("No"); 
         Stage secondStage = (Stage) buttonNo.getScene().getWindow(); 
         secondStage.close(); 
        } 

       }); 

       buttonYes.setText("Exit, Yes"); 
       buttonYes.setOnAction(new EventHandler<ActionEvent>() { 
        @Override 
        public void handle(ActionEvent event) { 

         System.out.println("Yes"); 
         Platform.exit(); 
        } 

       }); 

       StackPane secondaryLayout = new StackPane(); 
       secondaryLayout.getChildren().add(secondLabel); 
       secondaryLayout.getChildren().add(buttonNo); 
       secondaryLayout.getChildren().add(buttonYes); 

       Scene secondScene = new Scene(secondaryLayout, 350, 150); 

       Stage secondStage = new Stage(); 
       secondStage.setTitle("Exit"); 
       secondStage.setScene(secondScene); 

       //Set position of second window, related to primary window. 
       secondStage.setX(primaryStage.getX() + 250); 
       secondStage.setY(primaryStage.getY() + 100); 
       secondStage.centerOnScreen(); 

       secondStage.show(); 
      } 
     }); 

     //2nd Menu 
     Menu secondMenu = new Menu("2nd"); 
     CheckMenuItem htmlMenuItem = new CheckMenuItem("HTML"); 
     htmlMenuItem.setSelected(true); 
     secondMenu.getItems().add(htmlMenuItem); 

     CheckMenuItem cssMenuItem = new CheckMenuItem("CSS"); 
     cssMenuItem.setSelected(true); 
     secondMenu.getItems().add(cssMenuItem); 

     //3rd Menu 
     Menu thirdMenu = new Menu("3rd"); 
     ToggleGroup tGroup = new ToggleGroup(); 
     RadioMenuItem mysqlItem = new RadioMenuItem("MySQL"); 
     mysqlItem.setToggleGroup(tGroup); 

     RadioMenuItem oracleItem = new RadioMenuItem("Oracle"); 
     oracleItem.setToggleGroup(tGroup); 
     oracleItem.setSelected(true); 

     thirdMenu.getItems().addAll(mysqlItem, oracleItem, 
      new SeparatorMenuItem()); 

     Menu Menu = new Menu("Sub Menu"); 
     Menu.getItems().addAll(
      new CheckMenuItem("1"), 
      new CheckMenuItem("2"), 
      new CheckMenuItem("3")); 

     secondMenu.getItems().add(Menu); 

     //Menu Bar Get All 
     menuBar.getMenus().addAll(fileMenu, secondMenu, thirdMenu); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

Также парень на веб-сайте этой концепции я хочу ... он использует «Загрузить корневой макет из FXML файл". Поэтому он использует методы перетаскивания, используя fxml, что является простым способом, на мой взгляд. Я хочу научиться правильно кодировать его tbh. – ceotrammell

ответ

0

SplitPane Используйте для этой цели.

Вот короткий простой пример. Конечно, в реальном коде вы бы держать ссылки на Node с вам нужно получить доступ в некоторых переменных:

@Override 
public void start(Stage primaryStage) { 
    SplitPane splitPane = new SplitPane(new TableView(), 
             new VBox(new Label("some other content"))); 

    splitPane.setOrientation(Orientation.HORIZONTAL); 

    // place splitPane as center 
    BorderPane borderPane = new BorderPane(splitPane); 

    borderPane.setTop(new MenuBar(new Menu("File"))); 

    Scene scene = new Scene(borderPane, 600, 400); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^