Navigation Javafx:导航到页面
我正在尝试一个JavaFX2.0应用程序,参考集成示例。和Ensemble一样,我也希望显示不同的页面,但基于在中心页面上的点击。我没有任何树、工具栏等,只是希望根据特定选择显示一组页面。示例:我的主页可能有6个按钮,单击btn1我想要第1页,单击btn2第2页,依此类推。在第1页,我将再次有一些按钮和返回到上一页。在普通Java中,我们可以使用CardLayout轻松实现这一点。将所有页面添加到卡片并显示所需页面 查看Enemble项目,我看到所有的示例页面,如“AnchorLayout、ColorButton等”,它们都扩展了示例。Pages类有AllPagesPage、SamplePage、DocPage等的成员,这些成员都显示在左侧的树视图中 我添加了扩展示例窗格的示例,创建了另一个扩展示例的类DataPane。具有所有窗格参考的第三类:Navigation Javafx:导航到页面,navigation,javafx-2,Navigation,Javafx 2,我正在尝试一个JavaFX2.0应用程序,参考集成示例。和Ensemble一样,我也希望显示不同的页面,但基于在中心页面上的点击。我没有任何树、工具栏等,只是希望根据特定选择显示一组页面。示例:我的主页可能有6个按钮,单击btn1我想要第1页,单击btn2第2页,依此类推。在第1页,我将再次有一些按钮和返回到上一页。在普通Java中,我们可以使用CardLayout轻松实现这一点。将所有页面添加到卡片并显示所需页面 查看Enemble项目,我看到所有的示例页面,如“AnchorLayout、Co
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 pages=null;
专用静态字符串DATAPANE=“DATAPANE”;
公共AllPagesPage(){
pages=新HashMap();
addPages();
}
私有void addPages(){
pages.put(DATAPANE,(示例)newdatapane());
}
公共示例getPage(字符串页){
if(第页,集装箱箱(第页))
返回(示例)页面。获取(页面);
返回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) {
}
@覆盖
公共无效开始(阶段primaryStage){
setTitle(“你好世界”);
组根=新组();
场景=新场景(根,300,250);
/*
按钮btn=新按钮();
btn.设置布局X(100);
btn.设置布局(80);
btn.setText(“你好世界”);
btn.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
System.out.println(“你好世界”);
}
});
root.getChildren().add(btn);
*
*/
初级阶段。场景(场景);
primaryStage.show();
}
//应称为gotoPage(AllPagesPage.DATAPANE),
//在这个命令上,所有其他的符号都应该被删除,DataPane的内容应该出现。
公共无效goToPage(字符串页){
}
DataPane只包含构造函数中AnchorPaneSample的代码。没有更多或没有其他函数-仅构造函数
我应该如何使用gotoPage(字符串页面)方法获取舞台和设置页面?只需创建一个区域,以便查看窗格并对其进行更改:
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);
}
}
}
public类主扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
私人版页a;
private AllPagesPage=new AllPagesPage();
@凌驾
公共无效开始(阶段primaryStage){
setTitle(“你好世界”);
VBox root=新的VBox();
场景=新场景(根,300,250);
按钮btn=新按钮();
btn.setText(“打开数据窗格”);
btn.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
goToPage(AllPagesPage.DATAPANE);
}
});
root.getChildren().addAll(btn,pagesArea=newstackpane());
初级阶段。场景(场景);
primaryStage.show();
}
公共无效goToPage(字符串页){
窗格=页面。获取页面(第页);
如果(窗格!=null){
pagesArea.getChildren().clear();
pagesArea.getChildren().add(窗格);
}
}
}
您可能需要更新AllPagesPage类:
- getPage()中的验证是多余的,HashMap将为您执行此操作
- 为了更好的灵活性,您可能希望使用enum而不是静态字符串(它将允许迭代、简单比较、更容易的重构和其他)