生活随笔
收集整理的這篇文章主要介紹了
JavaFX之Controll用法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在JavaFX的UI開發(fā)中,FXController是個(gè)很重要的東西,主要是用于UI層和事件層分離。
?事實(shí)上,JavaFX使用FXML來(lái)開發(fā)UI界面,有多種形式來(lái)監(jiān)聽我們的事件,下面我們來(lái)細(xì)看。
?1.通過(guò)Controller Class來(lái)處理事件
?首先我們創(chuàng)建一個(gè)簡(jiǎn)單的界面,包含一個(gè)Button和一個(gè)Label。
?如下圖:
?
? Label的fx:id設(shè)置為mLabel,Button的fx:id設(shè)置為mButton,同時(shí)將Button的onAction設(shè)置為onButtonClick。
? 如下圖所示:
? 然后我們創(chuàng)建一個(gè)MainController類,寫下如下代碼:
?
[java]?view plaincopy
import?javafx.fxml.FXML;??import?javafx.scene.control.Button;??import?javafx.event.ActionEvent;??import?javafx.scene.control.Label;????public?class?MainLayoutController?{??????@FXML??????private?Button?mButton;??????@FXML??????private?Label?mLabel;????????????@FXML??????public?void?onButtonClick(ActionEvent?event)?{??????????mLabel.setText("HelloWorld");??????}??}??
? 記住,我們需要在FXML的最上層添加fx:controller = ""?指向自己的MainController類(帶包名)。
?
? 我們的Main類如下:
?
[java]?view plaincopy
import?javafx.application.Application;??import?javafx.fxml.FXMLLoader;??import?javafx.stage.Stage;??import?javafx.scene.Parent;??import?javafx.scene.Scene;??????public?class?Main?extends?Application?{??????@Override??????public?void?start(Stage?primaryStage)?{??????????try?{??????????????Parent?parent?=?FXMLLoader.load(getClass().getResource("MainLayout.fxml"));??????????????Scene?scene?=?new?Scene(parent,300,200);??????????????scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());??????????????primaryStage.setScene(scene);??????????????primaryStage.show();??????????}?catch(Exception?e)?{??????????????e.printStackTrace();??????????}??????}????????????public?static?void?main(String[]?args)?{??????????launch(args);??????}??}??
? 通過(guò)FXMLLoader加載FXML,并添加到Scene里面。
?
? 運(yùn)行效果如下:
? 當(dāng)我們點(diǎn)擊按鈕的時(shí)候,文本內(nèi)容變成HelloWorld。
? 這個(gè)就是我之前的文章中曾經(jīng)講過(guò)的事件方式。
?
? 2.像Android一樣處理事件
? 接下來(lái),我們來(lái)看看另外一種處理事件的方式。
? 事實(shí)上,JavaFX提供類似于Android的一些方法,我們可以通過(guò)fx:id來(lái)查找指定的控件,并通過(guò)代碼實(shí)現(xiàn)我們的事件。
? 我們將上面的Main方法改動(dòng)一下如下:
?
[java]?view plaincopy
import?javafx.application.Application;??import?javafx.fxml.FXMLLoader;??import?javafx.stage.Stage;??import?javafx.scene.Parent;??import?javafx.scene.Scene;??import?javafx.scene.control.Button;??import?javafx.scene.control.Label;??????public?class?Main?extends?Application?{??????@Override??????public?void?start(Stage?primaryStage)?{??????????try?{??????????????Parent?parent?=?FXMLLoader.load(getClass().getResource("MainLayout.fxml"));??????????????Label?label?=?(Label)parent.lookup("#mLabel");??????????????Button?button?=?(Button)parent.lookup("#mButton");??????????????button.setOnAction(e?->{??????????????????label.setText("HelloWorld?JavaFX");??????????????});??????????????Scene?scene?=?new?Scene(parent,300,200);??????????????scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());??????????????primaryStage.setScene(scene);??????????????primaryStage.show();??????????}?catch(Exception?e)?{??????????????e.printStackTrace();??????????}??????}????????????public?static?void?main(String[]?args)?{??????????launch(args);??????}??}?? ?
? 我們通過(guò)lookup根據(jù)fx:id來(lái)查找控件,并添加事件處理。
? 運(yùn)行效果如下:
?
? 大家可以明顯看見,我們通過(guò)lookup查找到控件后,添加的事件覆蓋了FXController中的事件。
? 這就是另外一種類似Android的查找控件-添加事件的模式,可以根據(jù)自己的需要酌情處理。
?
? 另外在e(fx)clipse 1.1版本里面,已經(jīng)可以像Nebeans一樣,通過(guò)fxml自動(dòng)生成FXController了,還是非常的方便的。
文章轉(zhuǎn)載:http://blog.csdn.net/ml3947
總結(jié)
以上是生活随笔為你收集整理的JavaFX之Controll用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。