我想參考Ensemble示例的JavaFX2.0應用程序。和Ensemble一樣,我也想顯示不同的頁面,但是基於中心頁面上的點擊。我沒有任何樹,工具欄等。只需要基於特定選擇顯示一組頁面。例如:我的主頁面可能有6個按鈕,單擊btn1我想要Page1,Page2點擊btn2等等。在Page1上,我會再次有一些按鈕和一個返回返回到上一頁。在普通的Java中,我們可以使用CardLayout輕鬆實現這一點。將所有分頁添加到卡片並顯示所需的頁面。看看Enemble項目,我看到所有的示例頁面都像「AnchorLayout,ColorButton等」,它們都擴展了Sample。並且Pages類具有AllPagesPage,SamplesPage,DocPage等的成員,這些成員都顯示在左側的TreeView中。Javafx:導航到頁
我添加了擴展窗格的樣例,創建了另一個擴展了樣例的類DataPane。具有所有窗格的引用的第3類:
public class AllPagesPage {
HashMap<String, Sample> pages = null;
private static String DATAPANE = "DATAPANE";
public AllPagesPage() {
pages = new HashMap<String, Sample>();
addPages();
}
private void addPages() {
pages.put(DATAPANE, (Sample)new DataPane());
}
public Sample getPage(String page) {
if (pages.containsKey(page))
return (Sample) pages.get(page);
return null;
}
}
要存儲基於我已經使用HashMap的名稱refernce。現在在我的應用程序類中,如何將頁面設置爲DataPane?
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World");
Group root = new Group();
Scene scene = new Scene(root, 300, 250);
/*
Button btn = new Button();
btn.setLayoutX(100);
btn.setLayoutY(80);
btn.setText("Hello World");
btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
System.out.println("Hello World");
}
});
root.getChildren().add(btn);
*
*/
primaryStage.setScene(scene);
primaryStage.show();
}
// Should be called as gotoPage(AllPagesPage.DATAPANE),
// on this command everythign else should be removed and contents of DataPane should come up.
public void goToPage(String page) {
}
DataPane只包含來自AnchorPaneSample的構造函數中的代碼。沒有更多或沒有其他功能 - 只有構造函數。
我應該如何獲取舞臺並設置頁面調用gotoPage(String page)方法???
謝謝你的開始。如果HashMap不好,那麼我應該使用ArrayList還是使用枚舉?另外,在DatePane中我想設置另一個頁面,讓我們說MainPane。我必須從DataPane btn事件中爲此調用goToPage。所以要麼讓gotoPane靜態(這是不正確的),要麼將應用程序的obj ref傳遞給所有其他頁面。你認爲應該怎樣解決? – Tvd
HashMap很好。我的意思是說你不需要額外的課程。只需將地圖添加到主類。關於你的第二個問題:你可以將ref傳遞給Main類到應用程序,這是正確的方法。或者你可以讓Main類成爲一個單例,並且使用靜態getter,而你的調用看起來像Main.getInstance()。toToPage(page.MainPage); –
謝謝謝爾蓋。如果實現枚舉,那麼爲什麼不使用EnumMap而不是HashMap。我試過這段代碼,但在EnumMap的insitialize行中發生錯誤: public enum Pages { DATAPANE(「DATAPANE」); 私有字符串值; private pages(String s){value = s; } }; EnumMap pagesMap = new EnumMap (Pages.class); 而不是樣品,我也嘗試與字符串也,但也只在該單行中得到錯誤。試圖刪除Paes.class,也沒有工作。我在這裏做出的那個愚蠢的錯誤找不到。你能指出嗎? –
Tvd