2012-11-25 1 views
8

私はNetbeansを使用しています。私はJavaデスクトップアプリケーションを開発したいと思います。アプリケーションはどういうわけかウェブサイトのようにする必要があります。つまり、私は自分のJavaデスクトップアプリケーションのいくつかのメニューを持っていて、それらのメニューのそれぞれをクリックすると、別のページにアクセスできるはずです(メインメニュー、レポートメニュー...)。 どんなアイデアも高く評価されます。Javaデスクトップアプリケーションでメニュー(ウェブサイトスタイルのナビゲーションリンク)を持たせる方法

答えて

5

ここにはJavaFXベースのサンプルがあり、異なるコンテンツ項目にhyperlinksのセットに基づいてメニューを生成します。これは、多くのWebページがどのように機能するかと非常に似ています。サンプルはウェブページに似たcssでスタイリングされます。

このサンプルでは、​​Javaコードでシーンコンテンツが作成されますが、好きな場合はSceneBuilderツールで生成されたコンテンツアイテムをfxmlに定義することができます。

JavaFXにも従来のアプリケーションmenu barsがあります(このサンプルでは説明されていません)。

サンプルプログラム出力、いくつかの異なるリンクをクリックして:

sugar coffee

をサンプルコード:

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

あなたはそれがmanu barmanuとの施設を与えるNetbeansのようなIDEを使用している場合manu itemドラッグアンドJFrame以上menu barをドロップし、それにマヌスとメニュー項目を追加することができます。

OR

あなたは1つの場所で複数のフレームを表示するためにカードレイアウトを使用することができます。

関連する問題