javafx之兩種局部界面的呈現方式


要求:


點擊左邊不同的按鈕,右邊紅色方框內出現不同的內容

===========================

第一種實現方法----插入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文件過於復雜,不便於修改和編寫





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM