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

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

这是一个基于JavaFX的示例,它基于一组到不同内容项的超链接生成菜单。 这与许多网页的工作方式非常相似。 样本通过css设置样式,类似于网页。

该示例使用Java代码创建场景内容,但您可以根据需要构建布局并定义由SceneBuilder工具生成的fxml中的内容项。

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

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

糖 咖啡

示例代码:

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" ) }; } } 

示例css:

 /** 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); } 

如果您使用像Netbeans这样的IDE,它提供menu barmenumenu item您可以将menu bar拖放到JFrame并向其添加菜单和菜单项。

要么

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