要求:
點擊左邊不同的按鈕,右邊紅色方框內出現不同的內容
===========================
第一種實現方法----插入fxml方法:
實現代碼==================
工程目錄:
源代碼路徑:http://pan.baidu.com/share/link?shareid=423722688&uk=1259703658
實現原理:在同一個地方嵌入三個fxml布局,然后設置可見性
第二種方法----tabpane方法:
實現代碼=======
工程目錄:
源代碼路徑:http://pan.baidu.com/share/link?shareid=458733868&uk=1259703658
實現原理:使用tabpane控件在一個root的根目錄上實現不同層的內容
問題:
這種方法有是個要解決的問題?
第一個question:
如下圖
多次點擊“第一個功能頁面”的按鈕(本圖點擊兩次),它會新建多個頁面而不是一個
解決辦法:
@FXML private void pagetwo_open(ActionEvent event) { boolean boo = true; int selectnum = 0; for(int i=0;i<tabnew.getTabs().size();i++){ if(tabnew.getTabs().get(i).getText().equals(btn_pagetwo.getText())){ boo = false; selectnum = i; } } if(boo){ Tab ntab = new Tab(); ntab.setText(btn_pagetwo.getText()); Label label = new Label("這個是第二個功能頁面"); label.setFont(new Font("Cambria", 32)); label.setTextFill(Color.web("#0076a3")); ntab.setContent(label); ntab.setClosable(true); tabnew.getTabs().add(ntab); } }
通過對比要新建tab的名稱是否已經在tabpane里面,是就不新建,否就新建
第二個question:
點擊了“第二個功能頁面“的按鈕(多次點擊也只會新建一個),但是點擊完成后右邊顯示的是“主頁“界面,而不是想要的”第二個功能頁面“
如下圖:
解決辦法:
@FXML private void pagethree_open(ActionEvent event) { boolean boo = true; int selectnum = 0; for(int i=0;i<tabnew.getTabs().size();i++){ if(tabnew.getTabs().get(i).getText().equals(btn_pagethree.getText())){ boo = false; selectnum = i; } } if(boo){ Tab ntab = new Tab(); ntab.setText(btn_pagethree.getText()); Label label = new Label("這個是第三個功能頁面"); label.setFont(new Font("Cambria", 32)); label.setTextFill(Color.web("#0076a3")); ntab.setContent(label); ntab.setClosable(true); tabnew.getTabs().add(ntab); tabnew.getSelectionModel().select(ntab); }else{ tabnew.getSelectionModel().select(selectnum); } }傳入新建的tab或則是已存在tab的序號,注意是tabnew.getSelectionModel().........而不是tabnew.getTabs()..........
參考地址:http://stackoverflow.com/questions/17047000/javafx-closing-a-tab-in-tabpane-dynamically
第三個question:
子tab關閉與不關閉的問題
如下圖:
可以設置ntab.setClosable(true);來控制tab是否可以關閉(true表示可以關閉,false表示不可以關閉,不設置默認為true),但是你有可能設置為true或則是默認后都不能關閉tab,就像主頁那個tab一樣,那么就需要檢查你的fxml文件。
它又三個狀態:UNAVAILABLE、SELECTED_TAB 、ALL_TABS,如果為UNAVAILABLE那么表示無論你設置不設置都不能關閉,SELECTED_TAB 表示你當前選中的tab可以關閉,ALL_TABS表示所有的tab可以關閉
最后總結:
方法1:
每一個功能頁面一個fxml文件,每一個fxml文件對應一個controller,便於歸類整理和修改,但是它一次將所有的fxml都載入,也許會影響性能
方法2:
一個tabpane就將該功能實現,是很簡單的方法,但是會造成fxml文件和controller文件過於復雜,不便於修改和編寫