1、新建LoginKit工具類(lèi)
importjavafx.beans.property.SimpleBooleanPropertyimportjavafx.beans.property.SimpleObjectPropertyimportjavafx.beans.property.SimpleStringPropertyimportjavafx.scene.control.Buttonimportjavafx.scene.control.PasswordFieldimportjavafx.scene.control.TextFieldimportjavafx.scene.layout.Backgroundimportjavafx.scene.layout.BackgroundFillimportjavafx.scene.paint.Color/**
* object 對象,相當于java單利
*/objectUserName {valtext = SimpleStringProperty()
}//密碼objectPassWord {valtext = SimpleStringProperty()
}//改變顏色objectBackGround {//設置顏色valblueColor = SimpleObjectProperty
(Background(BackgroundFill(Color.BLUE,null,null)))valcyanColor = SimpleObjectProperty(Background(BackgroundFill(Color.CYAN,null,null)))valisRightColor = SimpleBooleanProperty(false)
}/**
* 數據綁定
*/classLoginKit{//用戶(hù)名字段的綁定funuserName(): TextField {returnTextField().apply {
textProperty().bindBidirectional(UserName.text)
}
}//密碼字段的綁定funpassWord(): PasswordField {returnPasswordField().apply {
textProperty().bindBidirectional(PassWord.text)
}
}//登錄按鈕方法funloginBtn(): Button {returnButton("登錄").apply {//通過(guò)事件獲取用戶(hù)名與密碼的值setOnAction {
println("賬號:${UserName.text.value}")
println("密碼:${PassWord.text.value}")
}
}
}//清除按鈕funclearBtn(): Button {returnButton("清除").apply {
setOnAction {
UserName.text.value =""PassWord.text.value =""}
}
}
}
2、新建登錄視圖類(lèi)
這里使用kotlin的apply比較多,要有DSL的思想才好編寫(xiě)代碼packagecom.rub.viewimportcom.rub.kit.BackGroundimportcom.rub.kit.LoginKitimportjavafx.application.Applicationimportjavafx.beans.binding.Whenimportjavafx.geometry.Insetsimportjavafx.geometry.Posimportjavafx.scene.Sceneimportjavafx.scene.control.Labelimportjavafx.scene.layout.BorderPaneimportjavafx.scene.layout.HBoximportjavafx.scene.layout.VBoximportjavafx.stage.StageclassLoginView:Application() {overridefunstart(stage:Stage?){//!!表示告訴kotlin編輯器,此值不要檢查了。valst = stage!!varloginKit = LoginKit()//創(chuàng )建面板valborderPane = BorderPane().apply {
backgroundProperty().bind(
When(BackGround.isRightColor).then(BackGround.cyanColor).otherwise(BackGround.blueColor)
)//鼠標進(jìn)入界面改成true,即為青色,鼠標離開(kāi)界面改成false,即為藍色,setOnMouseEntered { BackGround.isRightColor.value =true}
setOnMouseExited { BackGround.isRightColor.value =false}//內邊距里padding = Insets(40.0)
center = VBox(20.0).apply {
alignment = Pos.CENTER
children.add(HBox().apply {
alignment = Pos.CENTER
children.addAll(Label("賬號:"), loginKit.userName())
})
children.add(HBox().apply {
alignment = Pos.CENTER
children.addAll(Label("密碼:"), loginKit.passWord())
})
children.add(HBox(60.0).apply {//兩個(gè)按鈕之間的距離translateX =10.0alignment = Pos.CENTER
children.addAll(loginKit.loginBtn(), loginKit.clearBtn())
})
}
}valscene = Scene(borderPane)
st.apply {this.scene = scene
sizeToScene()
title ="登錄界面"http://窗體不可變isResizable =falseshow()
}
}
}//啟動(dòng)入口類(lèi)funmain()= Application.launch(LoginView::class.java)
3、運行結果
功能實(shí)現鼠標進(jìn)入界面改成true,即為青色,鼠標離開(kāi)界面改成false,即為藍色,點(diǎn)擊按鈕獲取到文本框的值
image.png