Scala에서 FXML을로드하여 양식 응용 프로그램 만들기
흐름
할 일은 다음 세 가지입니다.
import 문 등은 적절히 추가해 주세요.
일단 GitHub 리포지토리 에 병아리형을 두고 있습니다.
.fxml 파일 준비
FXML 는, JavaFX 로 사용되는 GUI 의 마크 업 언어입니다.
GLUON Scene Builder 등을 사용하면 매우 쉽게 GUI를 만들 수 있습니다.
이번은 우선 이런 느낌의 폼으로 합니다.
BorderPane 위에 Button과 Label이 있을 뿐입니다.
응용 프로그램 만들기 그 자체가 목적이 아니기 때문에…
내용은 이런 느낌입니다.
main.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.BorderPane?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1">
<left>
<Button fx:id="button1" mnemonicParsing="false" onMouseClicked="#button1_MouseClicked" text="Button" BorderPane.alignment="CENTER" />
</left>
<center>
<Label fx:id="label1" prefHeight="17.0" prefWidth="265.0" text="Label" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
fx:id
라는 속성이 컨트롤을 포함하는 변수에 사용됩니다.onMouseClicked
등의 프로퍼티은, 이벤트 핸들러를 등록하기 전에 메소드명으로서 사용됩니다.컨트롤러 설정
MainController.scala
object MainController {
@FXML
private[this] var button1: Button = _
@FXML
private[this] var label1: Label = _
@FXML
private[this] def button1_MouseClicked(e: MouseEvent): Unit = {
label1.setText("Hello, world!")
}
}
이번에는 간단하게 버튼을 누르면 Label의 표시가 "Hello, world!"로 전환되도록 했습니다.
@FXML
어노테이션을 붙이면 .fxml 파일을 읽을 때 변수가 주입되는 방식처럼 보입니다.변수 이름과 메서드 이름이 .fxml 파일의 속성에 해당합니다.
FXML을 읽고 컨트롤러 설정
Main.scala
object Main extends App {
Application.launch(classOf[Main], args: _*)
}
class Main extends Application {
override def start(primaryStage: Stage): Unit = {
val loader = new FXMLLoader(getClass.getResource("main.fxml"))
loader.setController(MainController)
val root: Parent = loader.load()
val scene = new Scene(root, 800, 500)
primaryStage.setTitle("GUI test")
primaryStage.setScene(scene)
primaryStage.show()
}
}
중요한 것은 다음 두 줄입니다.
val loader = new FXMLLoader(getClass.getResource("main.fxml"))
loader.setController(MainController)
첫 번째 줄에서 main.fxml을 읽고 두 번째 줄에서 컨트롤러를 설정합니다.
이 쓰는 방법은 JDK8 이상에서만 유효합니다. 이전에 프로젝트 설정이 JDK7에 있다는 것을 깨닫지 못하고 영원히 형식이 해결되지 않아 고통 받았으므로주의하십시오.
이제 폼의 외형을 만들고 이벤트 핸들러를 등록할 수 있었습니다.
실제로 움직이면 다음과 같습니다. 제대로 실행되고 있습니다.
결론
그래서 Scala Advent Calendar 2 일째였습니다. 수수한 기사입니다.
아직 시작되었을 뿐입니다만, 개인적으로는 Spark라든지 기계 학습의 기사가 기대됩니다!
Reference
이 문제에 관하여(Scala에서 FXML을로드하여 양식 응용 프로그램 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ytakashina/items/b3c7493f7faa6c974d3e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)