Simple Colorful StackPanes
2013.3.28コードをscalafx_2.10-1.0.0-M2.jarで動くように修正しました。
scalafxを使える環境ができたのでデモにあるColorfulCirclesのCircleをStackPaneに変えたらどうなるかということで試してみました。
NetBeans 7.3では動くのですがターミナルでは実行エラーが出てしまいます。
java.lang.UnsatisfiedLinkError: com.sun.t2k.T2KGlyph.getGlyphInfo(J)[I........
JAVA_LIBRARY_PATHに/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/jre/libを追加する事でターミナルでも動作確認しました。
setenv JAVA_LIBRARY_PATH /Users/hshino/Library/java/Extensions:/Library/java/Extensions:System/Library/java/Extensions:/usr/lib/java:.:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries:/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/jre/lib
Main.scala
import javafx.scene.text.Font import javafx.scene.text.FontWeight import javafx.geometry.Pos import javafx.scene.paint.CycleMethod.NO_CYCLE import javafx.scene.paint.LinearGradient import javafx.scene.shape.StrokeType.OUTSIDE import scala.collection.JavaConversions.seqAsJavaList import scala.collection.immutable.VectorBuilder import scala.math.random import javafx.scene.effect.BlendMode.OVERLAY import javafx.scene.effect.BoxBlur import javafx.scene.effect.BlendMode._ import javafx.scene.paint.CycleMethod._ import javafx.scene.shape.StrokeType._ import scalafx.scene.text.Text import scalafx.scene.paint.Color import scalafx.scene.paint.Color.BLACK import scalafx.Includes._ import scalafx.animation.Timeline import scalafx.animation.Timeline.INDEFINITE import scalafx.application.JFXApp import scalafx.scene._ import scalafx.scene.paint.Stops import scalafx.scene.shape._ import scalafx.application.JFXApp.PrimaryStage import scalafx.scene.layout.StackPane import scala.language.postfixOps // import com.javafx.experiments.scenicview.ScenicView object Main extends JFXApp { val stacksToAnimate = new VectorBuilder[StackPane]() stage = new PrimaryStage { title.value = "Simple Colorful StackPanes" width = 800 height = 600 scene = new Scene { fill = BLACK content = Seq( new Group { children = Seq( new Rectangle { width <== scene.width height <== scene.height fill = BLACK }, new Group { val StackPanes = for (i <- 0 until 15) yield new StackPane { val helpIcon = new Rectangle{ width = 50.0 height = 25.0 fill = new LinearGradient(0,0,0,1, true, NO_CYCLE, Stops(0x4977A3,0xB0C6DA,0x9CB6CF,0xD0E6FA)) } val helpText = new Text{ fill = Color.WHITE stroke = Color.web("#7080A0") font = Font.font("Amble Cn", FontWeight.BOLD, 12) text = "ScalaFX" } getChildren content = List(helpIcon, helpText); } children = StackPanes stacksToAnimate ++= StackPanes effect = new BoxBlur(2, 2, 2) }, new Group { val StackPanes = for (i <- 0 until 20) yield new StackPane { val helpIcon = new Rectangle{ width = 50.0 height = 25.0 fill = new LinearGradient(0,0,0,1, true, NO_CYCLE, Stops(0x4977A3,0xB0C6DA,0x9CB6CF,0xD0E6FA)) } val helpText = new Text{ fill = Color.WHITE stroke = Color.web("#7080A0") font = Font.font("Amble Cn", FontWeight.BOLD, 12) text = "ScalaFX" } getChildren content = List(helpIcon, helpText); } children = StackPanes stacksToAnimate ++= StackPanes effect = new BoxBlur(2, 2, 2) }, new Group { val StackPanes = for (i <- 0 until 10) yield new StackPane { val helpIcon = new Rectangle{ width = 50.0 height = 25.0 fill = new LinearGradient(0,0,0,1, true, NO_CYCLE, Stops(0x4977A3,0xB0C6DA,0x9CB6CF,0xD0E6FA)) } val helpText = new Text{ fill = Color.WHITE stroke = Color.web("#7080A0") font = Font.font("Amble Cn", FontWeight.BOLD, 12) text = "ScalaFX" } getChildren content = List(helpIcon, helpText); } children = StackPanes stacksToAnimate ++= StackPanes effect = new BoxBlur(2, 2, 2) }) }, new Rectangle { width <== scene.width height <== scene.height fill = new LinearGradient(0, 1, 1, 0, true, NO_CYCLE, Stops(0xf8bd55, 0xc0fe56, 0x5dfbc1, 0x64c2f8, 0xbe4af7, 0xed5fc2, 0xef504c, 0xf2660f)) blendMode = OVERLAY } ) } } new Timeline { cycleCount = INDEFINITE autoReverse = true keyFrames = (for (stack <- stacksToAnimate.result) yield Seq ( at(0 s) {Set(stack.translateX -> random * 800, stack.translateY -> random * 600, stack.scaleX -> 1, stack.scaleY -> 1 )}, at(40 s) {Set(stack.translateX -> random * 800, stack.translateY -> random * 600, stack.scaleX -> 5, stack.scaleY -> 5 )} )).flatten }.play }