JavaFX 1.2.3 SDK Release
Runtime に続き、ついに JavaFX SDK も 1.2.3 にバージョンアップされたみたいです。
SDK は http://javafx.com/downloads/ から ダウンロード できます。
早速 インストールして、バージョンを確認...
$ javafx -version javafx 1.2.3_b36正確なバージョンは Runtime と同じ 1.2.3_b36 みたい...
リリースノートによると、
やはり 起動時間の改善がされたようです。
前回の記事の内容も間違いではなかったみたい...
残念ながら 『How to use CSS in JavaFX Part 6』 の
CSS 関連のバグはフィックスされていなかった。
今回は、性能改善がメインで バグフィックスは ほとんどされていないのかな...
JavaFX 1.2.3 Runtime Release
今日も いつものように JavaFX アプリケーションを Applet で実行...
あれ、なんかいつもより起動が早くなったような...
錯覚とは思えないほど早くなっていたので、何か変わってないか Java Preferences を確認してみた。
Snow Leopard の Java はまだ 1.6.0_18 に なっていないし...
と思ったら、なんと javafx-rt (SDK ではなく...) が V1.2.2_b5 から V1.2.3_b36 にバージョンアップされていた。
しかも、この V1.2.3_b36 から macosx-universal ではなく macosx-x86_64 に名前が変更されている。
もしかして 64bit ?
まぁ、これが要因かどうかわかりませんが...
起動が早くなったのは確かだし...
JavaFX 1.2 の Runtime もいつの間にか 3回もバージョンアップされてるし...
いづれにせよ、JavaFX の環境が徐々に整ってきているのは確かかな。
static import in JavaFX
今更ながら ちょっとした発見があったのでメモしておこう。
実は JavaFX でも static import を密かに?サポートしていたのです。
JavaFX Language Reference にも載っていないのに...
スクリプト関数、スクリプト変数 (JavaFX) もしくは 静的メソッド、静的フィールド、Enum 定数 (Java) は
import java.lang.Math.*; import java.lang.System.currentTimeMillis; import java.util.Calendar.YEAR; import java.util.concurrent.TimeUnit.SECONDS import javafx.scene.layout.Container.*; import javafx.geometry.VPos.TOP;のように記述すればよいです。
Java のように static を付ける必要はありません。
普通にクラスを import するのと全く同じです。
もちろん、static import すれば、クラス名を記述しなくても
println(max(1, 2)); // Math.max(int, int)のようにコーディングできます。
How to use CSS in JavaFX Part 6
前回までは JavaFX で CSS を利用するメリットばかりまとめてきましたが...
実は、JavaFX 1.2.1 の時点では
しかも、他にも小さな問題がありそうだし...
もちろん、既に これらの問題は修正済みであり、次期リリース JavaFX 1.3 を待つばかりとなっている。
しかし、こんな便利なものは今すぐ使いたいというのが人情というものでしょう。
ということで...
現象と対応を少し調べてみました。
ただ、ちょっと長くなりそうなので、次回から一つずつ書くことに...
もし興味があれば、ぜひ...
How to use CSS in JavaFX Part 5
前回までで 基本的な使い方を 大体 おさえましたが...
今回も懲りずに JavaFX で CSS...
How to use CSS in JavaFX でも紹介しましたが...
JavaFX では Node 以外にも Control の Skin の変数も CSS プロパティとして設定できるのです。
Control の Skin とは TextBox や Button 等の Control を表示するための Node を生成するためのクラスです。
実は Control の Skin のスタイルが設定できるというのが JavaFX で CSS を利用するメリットの一つでもあるのです。
カスタム Control を作ったことのある方であれば わかると思いますが...
スタイルのための変数を 実際にその変数を利用する Skin に定義できることは
- コードがシンプルになり保守性が向上する
- Control の変数が機能的なものだけにできる
- Control を変更することなく、見た目が変更できる
と言うことで...
早速 Control の見た目を CSS で変更してみましょう。
今回は Button の見た目を変更してみましたが、もちろん、他の Control でも可能です。
ただし、設定できるプロパティは それぞれ異なります。
LinearGradient してみる。
"javafx.scene.control.Button" { border-fill: linear (0%, 0%) to (0%, 100%) stops (0.00, #555555), (0.40, #000000), (0.60, #000000), (1.00, #555555); fill: linear (0%, 0%) to (0%, 100%) stops (0.00, #555555), (0.40, #000000), (0.60, #000000), (1.00, #555555); highlight-fill: linear (0%, 0%) to (0%, 100%) stops (0.00, #555555), (0.40, #000000), (0.60, #000000), (1.00, #555555); }
ボタンを丸くしてみる。
"javafx.scene.control.Button" { base: black; corner-radius: 20.0; width: 20.0; height: 20.0; }
丸ボタンに RadialGradient してみる。
"javafx.scene.control.Rectangle" { corner-radius: 20.0; width: 20.0; height: 20.0; border-fill: radial (0%, 0%) , 100% focus(25%, 25%) stops (0.00, skyblue), (1.00, blue); fill: radial (0%, 0%) , 100% focus(25%, 25%) stops (0.00, skyblue), (1.00, blue); highlight-fill: radial (0%, 0%) , 100% focus(25%, 25%) stops (0.00, skyblue), (1.00, blue); }
Button の API を見てもらえば分かりますが、Button 自体には スタイルを設定するための変数はほとんどありません。
しかし、CSS を使えば、ここまで Button の見た目を変えられるのです。
しかも、コードを変更することなく...
このサンプルを通して、少しでも CSS の良さが伝われば幸いです。
How to use CSS in JavaFX Part 4
How to use CSS in JavaFX Part 2 でセレクタについて紹介しましたが、
なんと JavaFX でも 疑似クラス セレクタが使えるらしい...
JavaFX 1.2.1 で利用できる 疑似クラス セレクタは
- :hover
- :pressed
- :focused
と言うことで...
今回は 簡単な使用例を紹介することに...
今まで紹介してきた CSS を使えば
Stage { scene: Scene { stylesheets: "{__DIR__}style.css" content: [ Rectangle { id: "bg" } Group { content: [ Rectangle { id: "foo", styleClass: "cell" } Rectangle { id: "bar", styleClass: "cell" } Rectangle { id: "hoge", styleClass: "cell" } Rectangle { id: "boo", styleClass: "cell" } ] } } }のように たったこれだけで右図のような表示が可能なのです。
上のコードは 構造を表すコードのみで スタイルに関するコードが全く含まれていない。
とってもいい感じ...
このサンプル、右のイメージでは分かりにくいですが、実は
- コマに マウスカーソルがあたると赤色になる
- コマを クリックすると青色になる
- タブキーを押すと 黄色の枠が次のコマに移動する
興味のあるかたは実際に以下のボタンをクリックして試してみてください。
で、肝心な CSS ですが、こんな感じ...
スタイルが 構造から 完全に分離されていてとってもいい感じ...
style.css
.cell { width: 100; height: 100; fill: #222222; stroke: #222222; strokeWidth: 0; focusTraversable: true; } .cell:hover { fill: red; stroke: red; strokeWidth: 0; } .cell:pressed { fill: blue; stroke: blue; strokeWidth: 0; } .cell:focused { stroke: #FFF04F; strokeWidth: 3; } #bg { width: 215; height: 215; fill: black; focusTraversable: false; } #foo { layoutX: 5; layoutY: 5; } #bar { layoutX: 5; layoutY: 110; } #hoge { layoutX: 110; layoutY: 5; } #boo { layoutX: 110; layoutY: 110; } "javafx.scene.shape.Rectangle" { cache: true; smooth: false; }
How to use CSS in JavaFX Part 3
今回も懲りずに JavaFX で CSS...
今回は CSS プロパティのデータ型についてです。
- Number
- String
- Boolean
- Font
- Color
- Paint
- URL
以下はそれぞれの使用例です。
Number
整数、少数 どちらも指定可能です。
"javafx.scene.shape.Rectangle" { layoutX: 10; layoutY: 10; width: 20.5; height: 20.5; }
String
任意の文字列をダブルクォートで括って指定します。
"javafx.scene.text.Text" { content: "HOGE"; }でも、これって スタイル??
Boolean
true もしくは false が指定できます。
"javafx.scene.shape.Rectangle" { visible: false; }
Font
Font は
FontWeight FontPosture サイズ フォント名の順で指定します。
FontWeight と FontPosture は省略することができます。
現段階では 相対サイズをサポートしていないようなので、pt で指定するのが無難かと...
"javafx.scene.text.Text".a { font: bold italic 14pt "Arial"; } "javafx.scene.text.Text".b { font: italic 14pt "Arial"; } "javafx.scene.text.Text".c { font: bold 14pt "Arial"; } "javafx.scene.text.Text".d { font: 14pt "Arial"; }
Color
以下の 3つの形式で指定できます。"javafx.scene.shape.Rectangle".a { fill: rgb(255, 255, 0); } "javafx.scene.shape.Rectangle".b { fill: red; } "javafx.scene.shape.Rectangle".c { fill: #FFFFFF; }
Paint
ちょっと感動ものです。CSS でグラデーションが指定できるとは...
まずは LinearGradient してみる。
書式は
linear (startX, startY) to (endX, endY) stops (offset, Color), (offset, Color), ... cycleMethod;です。cycleMethod には reflect, repeat を指定できます。もちろん 省略しても OK...
"javafx.scene.shape.Rectangle" { fill: linear (0%, 0%) to (0%, 100%) stops (0.00, #555555), (0.40, #000000), (0.60, #000000), (1.00, #555555); }
お次ぎは RadialGradient してみる。
書式は
radial (centerX, centerY), 100% focus(focusX, focusY) stops (offset, Color), (offset, Color), ... cycleMethod;です。cycleMethod には reflect, repeat を指定できます。もちろん 省略しても OK...
"javafx.scene.shape.Circle" { fill: radial (0%, 0%) , 100% focus(25%, 25%) stops (0.00, #7777777), (1.00, #000000); }
URL
画像の URL を指定します。URL はダブルクォートしてはいけません。
もちろん、URL ですので http:// も OK です。
"javafx.scene.image.ImageView" { image: url(file:/path/to/image.png) }