ScalaFx 설치와 데모 베껴보기

ScalaFX를 설치했습니다. ScalaFX는 JavaFX를 scala에서 불러쓸 수 있도록 해 놓은 것입니다. 아직 문서가 자세하게 만들어져 있지 않아 여기저기 맨땅에 헤딩하면서 설치하고 간단한 데모 띄우기까지 성공했습니다.

먼저 JavaFX를 설치해야 합니다. 저는 Oracle Java 설치 프로그램을 받아서 그대로 실행했습니다. ScalaFX는 구글 코드에서 소스를 받아와 다음과 같이 설치했습니다.
$ brew install mercurial
$ hg clone https://code.google.com/p/scalafx/
$ cd scalafx
$ sbt clean compile package publish-local

간단히 데모를 실행시켜보니 제대로 동작하지 않습니다. build.sbt 파일을 다루어야 한다는 것을 알게 되었습니다. 다음과 같이 ScalaFx와 JavaFx를 찾을 수 있도록 해 주었습니다.
libraryDependencies += "org.scalafx" % "scalafx" % "1.0-SNAPSHOT"

javaHome := Some(file("/Library/Java/JavaVirtualMachines/jdk1.7.0_07.jdk/Contents/Home"))

unmanagedJars in Compile += Attributed.blank(file(System.getenv("JAVA_HOME") + "/jre/lib/jfxrt.jar"))

이제 데모를 띄워봅니다. 인터넷에서 찾은 데모에 한국어만 바꾸어 보았습니다. 한글이 마음에 들지 않아 JavaFx 문서를 보니 CSS 방식으로 스타일을 바꿀수 있다고 합니다. 최종 수정한 소스와 스타일시트입니다. 폰트는 애플 명조로만 변경가능했는데 시스템의 다른 한글 폰트를 사용하는 방법을 찾아봐야 되겠습니다. 스타일 시트는 src/main/resources에 있지 않으면 전체 경로를 적어주어도  제대로 찾지 못하는듯 합니다.
import scalafx.application.JFXApp
import scalafx.stage.Stage
import scalafx.scene.Scene
import scalafx.scene.chart.{LineChart, NumberAxis, XYChart}
import scalafx.collections.ObservableBuffer

object LineChartSample extends JFXApp {

  // Defining the axes
  val xAxis = new NumberAxis
  xAxis.label = "Number of Month"
  val yAxis = new NumberAxis

  // Creating the chart
  val lineChart = LineChart(xAxis, yAxis)
  lineChart.title = "주식 모니터, 2010"

  // defining a series
  val data = ObservableBuffer(Seq(
    (1, 23),
    (2, 14),
    (3, 15),
    (4, 24),
    (5, 34),
    (6, 36),
    (7, 22),
    (8, 45),
    (9, 43),
    (10, 17),
    (11, 29),
    (12, 25)
  ) map {case (x, y) => XYChart.Data[Number, Number](x, y).delegate} )

  val series = XYChart.Series[Number, Number]("포트폴리오", data)
  lineChart.getData.add(series)

  stage = new Stage {
    title = "라인 차트 샘플"
    scene = new Scene(800, 600) {
      root = lineChart
      stylesheets add "style.css"
    }
    // following just doesn't work
    // scene.getStylesheets.add("style.css")
  }
}
.root {
 -fx-font-family: "AppleMyungjo";
}

다음은 프로그램을 실행한 화면


ScalaFX 재밌을것 같습니다. 근데 당분간은 다른 일을 해야될것 같군요.

UPDATE
구글링을 해보니 CSS에서 시스템의 모든 폰트를 사용할 수 있지는 않는듯 합니다. @font-face 명령은 java8에서 지원할 예정이라는 말도 있네요. 하지만 외부 폰트를 resource 디렉토리에 넣어두고 프로그램 내부에서 읽어들이도록 한 다음 CSS에서 폰트를 지정해주면 외부 폰트를 사용할 수 있다고 합니다. SK 텔리콤에서 공개했던 뫼비우스체로 바꾸어서 프로그램을 실행해 보았습니다. 폰트 크기는 좀 애매합니다만 잘 되는듯 합니다. 폰트 읽어들이는 명령은 다음과 같고 CSS 파일은 그 다음과 같이 수정했습니다. 영문 폰트 이름은 OSX의 경우 서체 관리자에서 서체 유효성 확인을 시행하면 확인할수 있었습니다.
  Font.loadFont(getClass().getResource("Moebius_Regular_kor.ttf").toExternalForm(), 24)
.root {
 -fx-font-family: 'Moebius Korea Regular';
}


댓글

이 블로그의 인기 게시물

터미널에서 스칼라 파일 직접 컴파일, 실행

로잉 머신 운동 2달째

curses 라이브러리 간단한 정리