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
  

}