我正在尝试参考Ensemble示例的JavaFX2.0应用程序。与Ensemble一样,我也想显示不同的页面,但是基于中心页面上的点击。我没有任何树,工具栏等。只是想要根据特定选择显示一组页面。示例:我的主页面可能有6个按钮,点击btn1我想要Page1,Page2 on btn2 click等等。在Page1上,我将再次有一些按钮和Return返回上一页。在普通的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)方法的页面???
答案 0 :(得分:1)
只需创建一个您想要查看窗格的区域并进行更改:
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
private Pane pagesArea;
private AllPagesPage pages = new AllPagesPage();
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World");
VBox root = new VBox();
Scene scene = new Scene(root, 300, 250);
Button btn = new Button();
btn.setText("Open DataPane");
btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
goToPage(AllPagesPage.DATAPANE);
}
});
root.getChildren().addAll(btn, pagesArea = new StackPane());
primaryStage.setScene(scene);
primaryStage.show();
}
public void goToPage(String page) {
Pane pane = pages.getPage(page);
if (pane != null) {
pagesArea.getChildren().clear();
pagesArea.getChildren().add(pane);
}
}
}
您可能想要更新AllPagesPage类: