将多个JavaFX组件集成到一个阶段中

将多个JavaFX组件集成到一个阶段中,java,javafx-2,javafx,Java,Javafx 2,Javafx,我有一个我无法解决的问题。我创建了JavaFX项目。我创建了主Java类,它将调用项目的所有组件: public class SQLBrowser extends Application { // Menu Utilization CreatingMenus menu; // Navigation Utilization Navigation navigation; // Set window size, color, window label

我有一个我无法解决的问题。我创建了JavaFX项目。我创建了主Java类,它将调用项目的所有组件:

public class SQLBrowser extends Application {

    // Menu Utilization
    CreatingMenus menu;
    // Navigation Utilization
    Navigation navigation;
    // Set window size, color, window label
    private final String windowLabel = "SQL Browser";
    private final int xSize = 1200;
    private final int ySize = 650;
    private final Color backgroundColor = Color.WHITE;

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        // Set Label
        primaryStage.setTitle(windowLabel);

        Group root = new Group();
        Scene scene = new Scene(root, xSize, ySize, backgroundColor);

        // Generate menu from sqlbrowser.menu.CreatingMenus;
        menu = new CreatingMenus();
        menu.initMenu(primaryStage, root, scene);
        // Generate Data table navigation from sqlbrowser.navigation.Navigation;
        navigation = new Navigation();
        navigation.initNavigation(primaryStage, root, scene);


    }
}
我在单独的Java类中创建了简单菜单:

public class CreatingMenus {

    // Generate Menu
    public void initMenu(final Stage primaryStage, Group root, Scene scene) {

        // Call Menu Actions from Java Method MenuActions
        final MenuActions ma = new MenuActions();

        MenuBar menuBar = new MenuBar();

        // File menu - new, save, close, exit
        Menu menu = new Menu("File");
        menu.getItems().add(new MenuItem("New"));
        menu.getItems().add(new MenuItem("Save"));
        menu.getItems().add(new MenuItem("Close"));
        menu.getItems().add(new SeparatorMenuItem());

        MenuItem menuItem = new MenuItem("Exit");

        // Exit from the application
        menuItem.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                // This Java Method is called from the Java Class MenuActions
                ma.programExit(); // Exit program
            }
        });

        menu.getItems().add(menuItem);

        menuBar.getMenus().add(menu);

        // Options menu - Preferences
        Menu options = new Menu("Options");
        options.getItems().add(new MenuItem("Preferences"));

        menuBar.getMenus().add(options);

        // Help menu - About
        Menu help = new Menu("Help");

        MenuItem helpItem = new MenuItem("About");

        // Exit from the application
        helpItem.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                aboutDialog();
            }
        });

        help.getItems().add(helpItem);

        menuBar.getMenus().add(help);

        menuBar.prefWidthProperty().bind(primaryStage.widthProperty());

        root.getChildren().add(menuBar);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public void aboutDialog() {

        final int xSize = 640;
        final int ySize = 480;
        final String logoImage = "/logo.png";
        final Color backgroundColor = Color.WHITE;
        final String text = "SQL Browser";
        final String version = "Product Version: 1.0";
        final String license = "License Information";

        final Stage aboutDialog = new Stage();
        aboutDialog.initModality(Modality.WINDOW_MODAL);

        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(20, 20, 20, 20));

        // Logo
        Image image = new Image(getClass().getResourceAsStream(logoImage));
        ImageView logo = new ImageView(image);

        grid.add(logo, 1, 0);

        // Product name
        Text productName = new Text(text);
        productName.setFont(Font.font("Verdana", 12));
        grid.add(productName, 0, 2);

        // Product version
        Text productVersion = new Text(version);
        productVersion.setFont(Font.font("Verdana", 12));
        grid.add(productVersion, 0, 3);

        // Product License
        Text productLicense = new Text(license);
        productLicense.setFont(Font.font("Verdana", 12));
        grid.add(productLicense, 0, 4);

        // Close Button
        Button closeButton = new Button("Close");

        closeButton.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent arg0) {
                // Close the dialog when "Close" button is pressed
                aboutDialog.close();
            }
        });
        grid.add(closeButton, 5, 18);

        // Configure dialog size and background color
        Scene aboutDialogScene = new Scene(grid, xSize, ySize, backgroundColor);
        aboutDialog.setScene(aboutDialogScene);
        aboutDialog.show();

    }
}
公共类创建菜单{
//生成菜单
public void initMenu(最终阶段primaryStage、组根、场景){
//从Java方法菜单操作调用菜单操作
最终菜单动作ma=新菜单动作();
菜单栏菜单栏=新建菜单栏();
//文件菜单-新建、保存、关闭、退出
菜单菜单=新菜单(“文件”);
menu.getItems().add(新菜单项(“新”));
menu.getItems().add(新建菜单项(“保存”);
menu.getItems().add(新建菜单项(“关闭”);
menu.getItems().add(新分隔符numItem());
MenuItem MenuItem=新MenuItem(“退出”);
//退出应用程序
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent e){
//此Java方法是从Java类MenuActions调用的
ma.programExit();//退出程序
}
});
menu.getItems().add(menuItem);
menuBar.getMenus().add(菜单);
//选项菜单-首选项
菜单选项=新菜单(“选项”);
options.getItems().add(新菜单项(“首选项”);
menuBar.getMenus().add(选项);
//帮助菜单-关于
菜单帮助=新菜单(“帮助”);
MenuItem helpItem=新MenuItem(“关于”);
//退出应用程序
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent e){
aboutDialog();
}
});
help.getItems().add(helpItem);
menuBar.getMenus().add(帮助);
menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
root.getChildren().add(菜单栏);
初级阶段。场景(场景);
primaryStage.show();
}
关于ALOG()的公共无效信息{
最终int xSize=640;
最终积分=480;
最后一个字符串logoImage=“/logo.png”;
最终颜色backgroundColor=Color.WHITE;
最终字符串text=“SQL浏览器”;
最终字符串版本=“产品版本:1.0”;
最终字符串license=“许可证信息”;
最后阶段aboutDialog=新阶段();
aboutDialog.InitModal(MODAL.WINDOW_MODAL);
GridPane grid=新建GridPane();
网格设置对齐(位置中心);
网格。setHgap(10);
网格设置间隙(10);
网格设置填充(新插图(20,20,20,20));
//标志
Image Image=新图像(getClass().getResourceAsStream(logoImage));
ImageView徽标=新的ImageView(图像);
添加(徽标,1,0);
//产品名称
Text productName=新文本(文本);
productName.setFont(Font.Font(“Verdana”,12));
添加(productName,0,2);
//产品版本
Text productVersion=新文本(版本);
productVersion.setFont(Font.Font(“Verdana”,12));
add(productVersion,0,3);
//产品许可证
Text productLicense=新文本(许可证);
productLicense.setFont(Font.Font(“Verdana”,12));
添加(productLicense,0,4);
//关闭按钮
按钮关闭按钮=新按钮(“关闭”);
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent arg0){
//按下“关闭”按钮时关闭对话框
aboutDialog.close();
}
});
添加网格(关闭按钮,5,18);
//配置对话框大小和背景色
场景aboutDialogScene=新场景(网格、xSize、ySize、backgroundColor);
约为Alog.setScene(约为Alogscene);
aboutDialog.show();
}
}
然后我添加了用于导航的手风琴组件:

public class Navigation {

    private static final Image BLUE_FISH = new Image("http://icons.iconarchive.com/icons/fasticon/fish-toys/128/Blue-Fish-icon.png");
    private static final Image RED_FISH = new Image("http://icons.iconarchive.com/icons/fasticon/fish-toys/128/Red-Fish-icon.png");
    private static final Image YELLOW_FISH = new Image("http://icons.iconarchive.com/icons/fasticon/fish-toys/128/Yellow-Fish-icon.png");
    private static final Image GREEN_FISH = new Image("http://icons.iconarchive.com/icons/fasticon/fish-toys/128/Green-Fish-icon.png");

    public void initNavigation(Stage primaryStage, Group root, Scene scene) {

        VBox stackedTitledPanes = createStackedTitledPanes();

        ScrollPane scroll = makeScrollable(stackedTitledPanes);
        scroll.getStyleClass().add("stacked-titled-panes-scroll-pane");
        scroll.setPrefSize(410, 480);
        scroll.setLayoutX(0);
        scroll.setLayoutY(20);

        primaryStage.setTitle("Fishy, fishy");
        scene = new Scene(scroll);
        //scene.getStylesheets().add(getClass().getResource("fishy-fishy.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    private VBox createStackedTitledPanes() {
        final VBox stackedTitledPanes = new VBox();
        stackedTitledPanes.getChildren().setAll(
                createTitledPane("One Fish", GREEN_FISH),
                createTitledPane("Two Fish", YELLOW_FISH, GREEN_FISH),
                createTitledPane("Red Fish", RED_FISH),
                createTitledPane("Blue Fish", BLUE_FISH));
        ((TitledPane) stackedTitledPanes.getChildren().get(0)).setExpanded(true);
        stackedTitledPanes.getStyleClass().add("stacked-titled-panes");

        return stackedTitledPanes;
    }

    public TitledPane createTitledPane(String title, Image... images) {
        FlowPane content = new FlowPane();
        for (Image image : images) {
            ImageView imageView = new ImageView(image);
            content.getChildren().add(imageView);

            FlowPane.setMargin(imageView, new Insets(10));
        }
        content.setAlignment(Pos.TOP_CENTER);

        TitledPane pane = new TitledPane(title, content);
        pane.getStyleClass().add("stacked-titled-pane");
        pane.setExpanded(false);

        return pane;
    }

    private ScrollPane makeScrollable(final VBox node) {
        final ScrollPane scroll = new ScrollPane();
        scroll.setContent(node);
        scroll.viewportBoundsProperty().addListener(new ChangeListener<Bounds>() {
            @Override
            public void changed(ObservableValue<? extends Bounds> ov, Bounds oldBounds, Bounds bounds) {
                node.setPrefWidth(bounds.getWidth());
            }
        });
        return scroll;
    }
}
公共类导航{
私有静态最终图像蓝色_鱼=新图像(“http://icons.iconarchive.com/icons/fasticon/fish-toys/128/Blue-Fish-icon.png");
私有静态最终图像红色_鱼=新图像(“http://icons.iconarchive.com/icons/fasticon/fish-toys/128/Red-Fish-icon.png");
私有静态最终图像黄色\鱼=新图像(“http://icons.iconarchive.com/icons/fasticon/fish-toys/128/Yellow-Fish-icon.png");
私有静态最终图像绿色_FISH=新图像(“http://icons.iconarchive.com/icons/fasticon/fish-toys/128/Green-Fish-icon.png");
公共导航(舞台主舞台、组根、场景){
VBox stackedTitledPanes=createStackedTitledPanes();
ScrollPane scroll=可滚动(堆叠标题窗格);
scroll.getStyleClass().add(“堆叠标题窗格滚动窗格”);
scroll.setPrefSize(410480);
scroll.setLayoutX(0);
滚动。设置布局(20);
初级阶段。设置标题(“鱼,鱼”);
场景=新场景(滚动);
//scene.getStylesheets().add(getClass().getResource(“fishy fishy.css”).toExternalForm());
初级阶段。场景(场景);
primaryStage.show();
}
专用VBox createStackedTitledPanes()的{
最终VBox stackedTitledPanes=新VBox();
stackedTitledPanes.getChildren().setAll(
CreateTitlePane(“一条鱼”,绿色的鱼),
CreateTiledPane(“两条鱼”、黄色鱼、绿色鱼),
CreateTTitlePane(“红鱼”,红鱼),
createTitledPane(“蓝鱼”,蓝乇鱼));
((标题窗格)stackedTitledPanes.getChildren().get(0)).setExpanded(true);
stackedTitledPanes.getStyleClass().add(“堆叠标题窗格”);
返回堆叠的标题窗格;
}
公共标题窗格CreateTitlePane(字符串标题、图像…图像){
FlowPane内容=新的FlowPane();
用于(图像:图像){
ImageView ImageView=新的ImageView(图像)
primaryStage.setTitle("Fishy, fishy");
// this line are wrong!
scene = new Scene(scroll);
//scene.getStylesheets().add(getClass().getResource("fishy-fishy.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
    VBox root = new VBox();
    root.setAlignment(Pos.TOP_CENTER);

    // Generate menu from sqlbrowser.menu.CreatingMenus;
    menu = new CreatingMenus();
    menu.initMenu(primaryStage, root);
    // Generate Data table navigation from sqlbrowser.navigation.Navigation;
    navigation = new Navigation();
    navigation.initNavigation(primaryStage, root);

    Scene scene = new Scene(root, xSize, ySize, backgroundColor);
    primaryStage.setScene(scene);
    primaryStage.show();
public void initMenu(final Stage primaryStage, VBox root) {
   ....
   root.getChildren().add(menuBar);
}

public void initNavigation(Stage primaryStage, VBox root) {
   ....
   root.getChildren().add(scroll);
}