Первое приложение на Kotlin (JavaFX)

от
Java    kotlin, java fx

Цель этой статьи - разобраться как работать с JavaFX в Kotlin.

Итак устанавливаем Intellij Idea, если еще не установили, и создаем новый проект.
(Предполагается что плагин для Kotlin уже установлен)
  Знімок екрана з 2016-02-06 21:32:39.png

Далее вводим имя проекта и выбираем рантайм библиотеку (я выбрал встроенную в плагин)
  Знімок екрана з 2016-02-06 21:33:15.png

Теперь создаем класс Kotlin в папке src, назовем его Main, и вводим необходимый минимум
  1. import javafx.application.Application
  2. import javafx.fxml.FXMLLoader.load
  3. import javafx.scene.Parent
  4. import javafx.scene.Scene
  5. import javafx.stage.Stage
  6.  
  7. /**
  8.  * Created by naik on 06.02.16.
  9.  */
  10. class Main : Application() {
  11.  
  12.     val layout = "/resources/main.fxml"
  13.  
  14.     override fun start(primaryStage: Stage?) {
  15.         System.setProperty("prism.lcdtext", "false") // for beautiful fonts on linux
  16.         primaryStage?.scene = Scene(load<Parent?>(Main.javaClass.getResource(layout)))
  17.         primaryStage?.show()
  18.     }
  19.  
  20.     companion object {
  21.         @JvmStatic
  22.         fun main(args: Array<String>) {
  23.             launch(Main::class.java)
  24.         }
  25.     }
  26. }

Конструкция companion object {... нужна для создания статического метода main, который должна увидеть JVM.

Теперь создадим в папке src/resources/ файл main.fxml, который будет содержать разметку UI. Нажимаем правой кнопкой на нем, и выбираем Open in SceneBuilder. Если вы еще его не установили, то самое время это сделать (выбираем 2.0, а не 1 :gg: ).
http://www.oracle.com/technetw...archive-2199384.html

Также можно редактировать интерфейс прямо в IDE, переключившись с Text в режим SceneBuilder
В открывшемся редакторе перетащим например VBox, сделав его корневым элементом интерфейса.

  Знімок екрана з 2016-02-06 21:48:00.png

Теперь можно приступать к созданию минимальной структуры приложения. Для этого создадим пакет controller, а в нем MainController.kt. Напишем в нем такой код.
  1. package controller
  2.  
  3. import javafx.fxml.FXML
  4. import javafx.scene.control.Button
  5.  
  6. /**
  7.  * Created by naik on 06.02.16.
  8.  */
  9. class MainController {
  10.  
  11.     @FXML
  12.     lateinit var testButton: Button
  13.  
  14.     fun initialize() {
  15.         print("Controller working")
  16.         testButton.setOnAction {
  17.             print("Button clicked!")
  18.         }
  19.     }
  20. }

lateinit нужно для того, чтобы Kotlin не требовал проинициализировать поле класса вручную (за это отвечает аннотация @FXML).
И конечно же нужно добавить кнопку в разметку, прописать ей fx:id="testButton"
И не забыть установить наш контроллер на разметку. Вот что у меня получилось
Открыть спойлер

С кодом вроде закончили. Теперь нужно бы запустить все это. Заходим в Edit Configurations (кнопка возле Run), нажимаем +, выбираем Kotlin, и настраиваем примерно так
  Знімок екрана з 2016-02-06 22:21:51.png

На этом все, можно далее изучать Kotlin, создавая интерфейс на JavaFX, тем более что в JavaFX реализован паттерн Observable, что по идее должно пригодиться в Kotlin
  • +10
  • views 20478