我正在尝试参考 Ensemble 示例的 JavaFX2.0 应用程序。像 Ensemble 一样,我也想显示不同的页面,但基于中心页面上的点击。我没有任何树、工具栏等。只想根据特定选择显示一组页面。示例:我的主页可能有 6 个按钮,在单击 btn1 时我想要 Page1,在 btn2 上单击 Page2 等等。在第 1 页上,我将再次有一些按钮和一个返回以返回到上一页。在普通 Java 中,我们可以使用 CardLayout 轻松实现这一点。将所有分页添加到卡片并显示所需的页面。
查看 Enemble 项目,我看到所有示例页面,如“AnchorLayout、ColorButton 等”,它们都扩展了 Sample。Pages 类有 AllPagesPage、SamplesPage、DocPage 等的成员,它们都显示在左侧的 TreeView 中。
我添加了扩展 Pane 的 Sample,创建了另一个扩展 Sample 的类 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。现在在我的应用程序类中,如何将页面设置为 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 仅包含来自 Constructor 中的 AnchorPaneSample 的代码。没有更多或没有其他功能 - 只有构造函数。
我应该如何在调用 gotoPage(String page) 方法时获取舞台和设置页面???