如何在java桌面应用程序中使用菜单(网站样式的导航链接)

如何在java桌面应用程序中使用菜单(网站样式的导航链接),java,user-interface,menu,Java,User Interface,Menu,我正在使用Netbeans,我想开发一个java桌面应用程序。该应用程序应该像一个网站,我的意思是,我想在我的java桌面应用程序中有一些菜单,通过单击这些菜单中的每一个,我应该能够访问一些包含不同内容的不同页面(如主菜单、报告菜单……)。 任何想法都将受到高度赞赏。这里是一个基于的示例,它根据一组不同的内容项生成菜单。这与许多网页的工作原理非常相似。该示例的样式为via,类似于网页 该示例使用Java代码创建场景内容,但如果愿意,您可以在工具生成的中构建布局并定义内容项 JavaFX也有传统的

我正在使用Netbeans,我想开发一个java桌面应用程序。该应用程序应该像一个网站,我的意思是,我想在我的java桌面应用程序中有一些菜单,通过单击这些菜单中的每一个,我应该能够访问一些包含不同内容的不同页面(如主菜单、报告菜单……)。 任何想法都将受到高度赞赏。

这里是一个基于的示例,它根据一组不同的内容项生成菜单。这与许多网页的工作原理非常相似。该示例的样式为via,类似于网页

该示例使用Java代码创建场景内容,但如果愿意,您可以在工具生成的中构建布局并定义内容项

JavaFX也有传统的应用程序(本示例中未演示)

示例程序输出,单击了一些不同的链接:

示例代码:


如果您使用的是像
Netbeans
这样的IDE,它提供了
菜单栏
菜单
菜单项
的功能,您可以将
菜单栏
拖放到
JFrame
上,并向其中添加菜单和菜单项

可以使用卡片布局在一个位置显示多个帧

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.stage.Stage;

/**
 * Displays content panes activated by a hyper-link based navigation bar
 */
public class HyperlinkedNavMenu extends Application {
    private LinkContent[] linkContent;

    private final StackPane content = new StackPane();

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

    @Override
    public void start(Stage stage) {
        linkContent = createLinkContent();

        content.setPrefWidth(200);
        HBox.setHgrow(content, Priority.ALWAYS);

        stage.setTitle("Capello Pazzo");
        stage.setScene(new Scene(createLayout()));
        stage.show();
    }

    private Pane createLayout() {
        HBox layout = new HBox(
                10,
                createNavBar(), 
                content
        );

        layout.getStylesheets().add(
                getClass().getResource("nav.css").toExternalForm()
        );

        return layout;
    }

    private VBox createNavBar() {
        VBox nav = new VBox();
        nav.setMinWidth(100);
        nav.getStyleClass().add("navbar");

        for (int i = 0; i < linkContent.length; i++) {
            Hyperlink link = createLink(
                    linkContent[i].linkText, 
                    createContentNode(linkContent[i])
            );
            nav.getChildren().add(link);
            if (i == 0) {
                link.fire();
            }
        }

        return nav;
    }

    private Node createContentNode(LinkContent linkContent) {
        Label label = new Label(linkContent.contentText);
        label.setWrapText(true);

        VBox contentNode = new VBox(
                10,
                new ImageView(linkContent.image),
                label
        );
        contentNode.getStyleClass().add("contentnode");

        return contentNode;
    }

    private Hyperlink createLink(final String linkText, final Node contentNode) {
        Hyperlink link = new Hyperlink(linkText);
        link.setOnAction(t -> content.getChildren().setAll(
                contentNode
        ));

        return link;
    }

    private static class LinkContent {
        final String linkText, contentText;
        final Image image;

        LinkContent(String linkText, String contentText, String imageLoc) {
            this.linkText = linkText;
            this.contentText = contentText;
            this.image = new Image(imageLoc);
        }
    }

    // icon license:     http://creativecommons.org/licenses/by-nc-nd/3.0/
    // icon attribution: http://www.iconarchive.com/artist/archigraphs.html
    private LinkContent[] createLinkContent() {
        return new LinkContent[] {
                new LinkContent(
                        "Lorem",
                        "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
                        "http://icons.iconarchive.com/icons/archigraphs/tea-party/128/Sugar-Cubes-icon.png"
                ),
                new LinkContent(
                        "Vestibulum",
                        "Vestibulum a dui et massa laoreet vehicula.",
                        "http://icons.iconarchive.com/icons/archigraphs/tea-party/128/Tea-Cake-icon.png"
                ),
                new LinkContent(
                        "Donec",
                        "Donec sed euismod risus.",
                        "http://icons.iconarchive.com/icons/archigraphs/tea-party/128/Tea-Cup-icon.png"
                ),
                new LinkContent(
                        "Duis",
                        "Duis semper porttitor leo ac posuere.",
                        "http://icons.iconarchive.com/icons/archigraphs/tea-party/128/Tea-Pot-icon.png"
                )
        };
    }
}
/** file: nav.css
 * place in same directory as HyperlinkedNavMenu.java and have your build system copy it
 * to the same location as HyperlinkedNavMenu.java.class */

.root {
    -fx-background-image: url("http://images.all-free-download.com/images/graphiclarge/linen_fabric_background_04_hd_picture_169825.jpg");
    -fx-padding: 15; 
    -fx-font-size: 15;
}

.navbar {
    -fx-background-color: burlywood, peachpuff; 
    -fx-background-radius: 10, 10; 
    -fx-background-insets: 0, 2; 
    -fx-font-style: italic; 
    -fx-padding: 10 15 15 10; 
}

.contentnode {
    -fx-background-color: aliceblue; 
    -fx-padding: 15 20 20 15;
    -fx-effect: dropshadow(gaussian, slategrey, 10, 0, 5, 5);  
}