2012-11-25 11 views
8

Tôi đang sử dụng Netbeans và tôi muốn phát triển một ứng dụng máy tính để bàn java. Ứng dụng nên giống như một trang web bằng cách nào đó, ý tôi là tôi muốn có một số menu trong ứng dụng máy tính để bàn java của mình bằng cách nhấp vào mỗi một trong các menu đó tôi có thể truy cập vào một số trang khác nhau. menu báo cáo….). Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao.Cách có menu (liên kết điều hướng kiểu trang web) trong ứng dụng máy tính để bàn java

Trả lời

5

Đây là mẫu dựa trên JavaFX, tạo trình đơn dựa trên bộ hyperlinks cho các mục nội dung khác nhau. Điều này khá giống với cách nhiều trang web hoạt động. Mẫu được tạo kiểu qua css, tương tự như một trang web.

Mẫu tạo nội dung cảnh trong mã Java, nhưng bạn có thể tạo bố cục và xác định các mục nội dung trong fxml được tạo bởi công cụ SceneBuilder nếu bạn muốn.

JavaFX cũng có ứng dụng truyền thống là menu bars (không được minh họa trong mẫu này).

chương trình mẫu đầu ra, với một số liên kết khác nhau nhấp:

sugar coffee

Mẫu mã:

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

mẫu 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

Nếu bạn đang sử dụng một IDE như Netbeans nó mang lại cho cơ sở của manu bar, manumanu item bạn có thể kéo và thả các menu bar qua JFrame và thêm Manus và các mục menu với nó.

HOẶC

Bạn có thể sử dụng bố cục thẻ để hiển thị nhiều khung ở một nơi.