要求:

點擊左邊不同的按鈕,右邊紅色方框內出現不同的內容
===========================
第一種實現方法----插入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文件過於復雜,不便於修改和編寫
