前面介紹了如何通過(guò)fxml文件編排界面布局,但是光有靜態(tài)界面底子沒(méi)法處理事務(wù),有必要?jiǎng)e的書(shū)寫(xiě)事務(wù)邏輯的代碼,方能呼應(yīng)各按鈕的單擊事情,并將事務(wù)成果即使出現(xiàn)到界面上。明顯,fxml內(nèi)部寫(xiě)不了Java代碼,一起進(jìn)口程序現(xiàn)已把控件都保管給了fxml文件,也無(wú)法在Application代碼中干涉控件的操作。既然整個(gè)界面都托付給了fxml,那么解鈴還須系鈴人,只能且有必要由fxml指定后續(xù)的邏輯控制器。具體做法是在fxml的根節(jié)點(diǎn)中添加特點(diǎn)“fx:controller”,通過(guò)該特點(diǎn)設(shè)置當(dāng)時(shí)界面的控制器途徑。比方之前的登錄布局文件login_with_flow.fxml,它的根節(jié)點(diǎn)是流式窗格FlowPane,所以就給FlowPane節(jié)點(diǎn)補(bǔ)充“fx:controller”的取值,具體的標(biāo)簽比如見(jiàn)下:
xmlns:fx=”http://javafx.com/fxml”alignment=”center”hgap=”5″vgap=”5″>
由以上的FlowPane標(biāo)簽可知,它指定的控制器途徑為“com.javafx.fxml.LoginController”,這個(gè)LoginController類(lèi)正是login_with_flow.fxml對(duì)應(yīng)的控制器代碼。作為FXML專(zhuān)屬的搭檔,控制器也要符合一定的格局標(biāo)準(zhǔn),首先它有必要實(shí)現(xiàn)了接口Initializable,并重寫(xiě)該接口界說(shuō)的initialize方法,這個(gè)方法顧名思義會(huì)在界面初始化之時(shí)調(diào)用。其次,控制器內(nèi)部需要聲明FXML文件界說(shuō)好的控件編號(hào),這樣才能通過(guò)控件編號(hào)操作每個(gè)控件目標(biāo)。下面便是一個(gè)控制器范本的代碼示例:
//界面控制器有必要實(shí)現(xiàn)自接口Initializable
publicclassLoginControllerimplementsInitializable{
@FXML
private控件類(lèi)型控件編號(hào);//其中控件類(lèi)型為JavaFX的控件類(lèi)名,控件編號(hào)取自fxml文件中的fx:id
@Override
publicvoidinitialize(URLlocation,ResourceBundleresources){//界面翻開(kāi)后的初始化操作
//可在此給各控件設(shè)置單擊事情或許選中事情,也可設(shè)置控件上的文本字體及其巨細(xì)
}
}
仍以前述的登錄窗口為例,它的布局文件名叫l(wèi)ogin_with_flow.fxml,一起fxml文件設(shè)定了界面對(duì)應(yīng)的控制器叫做LoginController。注意到登錄窗口具有兩個(gè)單選按鈕和一個(gè)登錄按鈕,這三個(gè)按鈕都應(yīng)當(dāng)觸發(fā)單擊或許選中事情,所以在控制器的代碼中別離聲明幾個(gè)待操作的控件目標(biāo),目標(biāo)稱(chēng)號(hào)與fxml中的fx:id保持一致。然后重寫(xiě)控制器的initialize方法,在該方法中各自調(diào)用三個(gè)按鈕的setOnAction方法,用以注冊(cè)單擊或選中按鈕后的觸發(fā)事情。根據(jù)以上闡明編寫(xiě)登錄窗口的控制器代碼示例如下:
//登錄窗口的界面控制器
publicclassLoginControllerimplementsInitializable{
@FXML
privateRadioButtonrbPassword;//暗碼登錄對(duì)應(yīng)的單選按鈕
@FXML
privateRadioButtonrbVerifycode;//驗(yàn)證碼登錄對(duì)應(yīng)的單選按鈕
@FXML
privateLabellabelUser;//用戶(hù)名標(biāo)簽
@FXML
privateTextFieldfieldUser;//用戶(hù)名輸入框
@FXML
privateLabellabelPassword;//暗碼標(biāo)簽
@FXML
privatePasswordFieldfieldPassword;//暗碼輸入框
@FXML
privateButtonbtnLogin;//登錄按鈕
@FXML
privateLabellabelLoginResult;//登錄成果標(biāo)簽
@Override
publicvoidinitialize(URLlocation,ResourceBundleresources){//界面翻開(kāi)后的初始化操作
rbPassword.setOnAction(e->{//選中“暗碼登錄”單選按鈕后觸發(fā)的事情
labelUser.setText(“用戶(hù)名:”);
labelPassword.setText(“密碼:”);
});
rbVerifycode.setOnAction(e->{//選中“驗(yàn)證碼登錄”單選按鈕后觸發(fā)的事情
labelUser.setText(“手機(jī)號(hào):”);
labelPassword.setText(“驗(yàn)證碼:”);
});
//
btnLogin.setOnAction(e->{//單擊“登錄”按鈕后觸發(fā)的事情
Stringresult=String.format(“您輸入的用戶(hù)名為%s,暗碼為%s”,
fieldUser.getText(),fieldPassword.getText());
labelLoginResult.setText(result);//在登錄成果標(biāo)簽上顯示登錄信息
});
}
}
由上面代碼可見(jiàn),這個(gè)控制器的處理邏輯很簡(jiǎn)單,選中按鈕后只是給文本標(biāo)簽設(shè)置指定文字罷了,當(dāng)然這樣也便利調(diào)查控件的操作成果。
回到登錄窗口的進(jìn)口代碼LoginMain,運(yùn)行測(cè)試程序彈出如下圖所示的登錄界面。
由圖示可見(jiàn)登錄窗口默許選中“暗碼登錄”,接著單擊右邊的“驗(yàn)證碼登錄”按鈕,發(fā)現(xiàn)下方的用戶(hù)名標(biāo)簽變成了“手機(jī)號(hào):”,暗碼標(biāo)簽變成了“驗(yàn)證碼:”,闡明“驗(yàn)證碼登錄”按鈕的選中事情被正常觸發(fā)。然后別離在用戶(hù)名輸入框與暗碼輸入框中填入用戶(hù)名和暗碼,再單擊下面的登錄按鈕,此時(shí)登錄窗口的界面效果如下圖所示。
果不其然,登錄按鈕下方的文本標(biāo)簽展示了輸入的用戶(hù)名和暗碼信息,可知登錄按鈕的單擊事情也正確呼應(yīng)了。
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢(xún)專(zhuān)線(xiàn))
400-001-5281 (售后服務(wù)熱線(xiàn))
深圳市坂田十二橡樹(shù)莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專(zhuān)線(xiàn):400-001-5281
長(zhǎng)沙市天心區(qū)芙蓉中路三段398號(hào)新時(shí)空大廈5樓
聯(lián)系電話(huà)/ (+86 0731)88282200
品牌服務(wù)專(zhuān)線(xiàn)/ 400-966-8830
旗下運(yùn)營(yíng)網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)