swiftはxcodeだけあり iPhone, macOS両対応
kotlinはAndroid Studio事例はたくさんあるが、desktop appの作成はうまくいかないらしい
JavaFXをコールするにしてもいろいろ面倒くさい
WindowBuilderみたいなのはないので、TornadoFXでwrapしてScenebuilderをダウンロードして使うのがいいらしい
以下導入
Terminal から "brew install gradle" "brew install maven32" で開発ツールインストールしておく
JDKが入っていなければ1.8以降をインストール
Android Studioとは別に
をインストール
Pluginsの下の真ん中のボタン Browse respositories...から TornadoFXプラグインをインストール
New Project...から TornadoFX - tornadofx-gradle-projectを選ぶ
初回 gradle homeがないといってくるので
/usr/local/Cellar/gradle/4.9/libexec/
あたりを指定
make: Buildボタン コマンドラインなら "gradle build"
実行:まずRunメニューのEdit Configurations...から + を押したあと、Gradleを選び、Gradle Projectに現在のプロジェクトを選び、Tasksに"run"と入力する。すると下記のようになって実行ボタンが使える コマンドラインなら "gradle run"
fxmlのサンプル
下記にfxmlを入れる src/main/resources/PACKAGES/ そうするとAnchorPane by fxml()で読み込めるし gradleでもリソース扱いされてファイルが無視されない
fxmlの実際:fx:controller attributeがAnchorPaneタグ内に入っているとjavafx exception : Controller value already specifiedエラーが出るので削除すること。IDEならScenebuilderがビルトインされていて編集が容易。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Button layoutX="172.0" layoutY="121.0" mnemonicParsing="false" onAction="#increment" text="Click here to Increment" />
<Label layoutX="135.0" layoutY="70.0" text="Counter: " />
<Label fx:id="counterLabel" layoutX="219.0" layoutY="70.0" prefHeight="17.0" prefWidth="66.0" text="0" />
</children>
</AnchorPane>
読み込む方の実際 MainView.kt
package com.hatenablog.gikoha.view
import tornadofx.*
import javafx.scene.layout.*
import javafx.scene.control.*
import javafx.beans.property.SimpleIntegerProperty
class MainView : View("Hello TornadoFX FXML") {
override val root : AnchorPane by fxml()
val counter = SimpleIntegerProperty()
val counterLabel: Label by fxid()
init {
counterLabel.bind(counter)
}
fun increment() {
counter.value += 1
}
}
jarの作成: "gradle jar" で/build/libs以下にjarができる。でもでかい。
Charts · edvin/tornadofx Wiki · GitHubなどはkotlinならjavaよりかなり簡単にグラフ化できるのでよさげ。