JFXtras 2プロジェクトとは?
2013年12月の現在からすると1年半前のエントリーですので内容が古いです。
jfxtras-labs-2.2-r6-20131206.180346-19.jarは
ビルド済みの物をダウンロードしたほうが早いです。
https://oss.sonatype.org/content/repositories/snapshots/org/jfxtras/jfxtras-labs/2.2-r6-SNAPSHOT/
jfxtras-labs-2.2-r6-20131206.180346-19.jarをクラスパス設定するとClockGauge_JFXtras.javaはコンパイルして試すことは現在でもできます。以下の記事内容は古いです。
JFXtrasプロジェクトへようこそがJFXtrasプロジェクトのサイトです。
JavaFX 2.xの高品質のコントロールおよびアドオンのセットとタイトルと共に説明がありますね。
Webstartで試す事ができます。
JFXtrasプロジェクトのサイトではこのように説明されています。
プロジェクトは異なる2つの部分に分割されます。
公式”JFXtras library”のコンポーネントは将来のリリースでも変更の少ないAPIで安定していると考えられます。
” JFXtras Labs”は活発に開発中の状態に現在あり実験的なコンポーネントも含んでいます。
GitHubよりダウンロードしてみるとわかるんですが6月30日現在安定版のJFXtras libraryはまだ出ていないです。
一方、” JFXtras Labs”は最新のソースをこのJFXtras / jfxtras-labs GitHubよりダウンロードしてビルドする事ができます。
6月30日現在ダウンロードして展開すると”JFXtras-jfxtras-labs-d531c07”になってます。
以下はMac OS Xでのビルドの方法です。
1 build.gradleファイルの修正
1行目から15行目が以下のようになってます。
apply plugin: 'java' apply plugin: 'maven' apply plugin: 'signing' apply plugin: 'eclipse' apply plugin: 'idea' buildscript { final javafxHome = System.env['JAVAFX_HOME'] if (javafxHome) { ext.javafxJar = "${javafxHome}/rt/lib/jfxrt.jar" //10行目 } else { final javaHome = System.env['JAVA_HOME'] if (javaHome) ext.javafxJar = "${javaHome}/jre/lib/jfxrt.jar" }
buildscript の部分では”JAVAFX_HOME”を設定してあるならjfxrt.jar の在処は”${javafxHome}/rt/lib/jfxrt.jar”で”JAVAFX_HOME”の設定がないのなら"${javaHome}/jre/lib/jfxrt.jar"となってます。
しかしMac OS XではJdk7u5を使っていても開発中のJdk7u6 betaを使っていてもjfxrt.jar の在処は”JAVAFX_HOME”を設定してある場合には”${javafxHome}/jre/lib/jfxrt.jar”です。
(.cshrcに設定するなら
jdk1.7.0_06.jdkの場合
setenv JAVAFX_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home
)
またMac OS Xではjfxrt.jar”がJDKに内蔵されているためjavafxHomeとjavaHomeは同じでなので"${javaHome}/jre/lib/jfxrt.jar"でも中身は同じです。
従って10行目の"${javafxHome}/rt/lib/jfxrt.jar"の"rt"は"jre”に修正してext.javafxJar = "${javafxHome}/jre/lib/jfxrt.jar"とします。
2 ターミナルでJFXtras-jfxtras-labs-d531c07ディレクトリへ移動。
3 ./gradlew build以下のように表示されればビルド成功です。
:processTestResources UP-TO-DATE
:testClasses
:test
:check
:buildBUILD SUCCESSFUL
Total time: 1 mins 34.957 secs
JFXtras-jfxtras-labs-d531c07/build/libs/に
JFXtras-jfxtras-labs-d531c07-0.2-SNAPSHOT.jarが作成されています。
4 クラスパスの設定をします
次回以降の”クラスパス設定変更”の手間を省くため”JFXtras-jfxtras-labs_new_JAR”というようなビルドした最新のjarを保管するためのフォルダを作成。
JFXtras-jfxtras-labs-d531c07-0.2-SNAPSHOT.jarを保管するためのフォルダにコピーした後で名前を共通したものするため”JFXtras-jfxtras-labs-0.2-SNAPSHOT.jar”などのように変更。
.cshrcにクラスパス設定を追加
setenv CLASSPATH ${CLASSPATH}:/Users/hshino/Downloads/JFXtras-jfxtras-labs_new_JAR/JFXtras-jfxtras-labs-0.2-SNAPSHOT.jar
有効化
source ~/.cshrc
(これはそれぞれの環境に合わせて変更してください)
5 これで最新の”jfxtras-labs”が使えます。
早速試してみましょう。
以下のコードをコンパイルして実行してみてください
ClockGauge_JFXtras.java
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.Group; import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.layout.GridPane; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.scene.text.Font; import jfxtras.labs.scene.control.gauge.Clock; import jfxtras.labs.scene.control.gauge.ClockBuilder; /** * Clock. * * @see jxftras.labs.scene.control.gauge.Clock */ public class ClockGauge_JFXtras extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { // Create some controls Clock clockTokyo = ClockBuilder.create() .timeZone("Asia/Tokyo") .secondPointerVisible(true) .autoDimEnabled(true) .daylightSavingTime(false) .theme(Clock.Theme.BRIGHT) .clockStyle(Clock.ClockStyle.IOS6) .brightBackgroundPaint(Color.web("#0000FF", 0.5)) // .darkBackgroundPaint(Color.WHITE) .darkTickMarkPaint(Color.ORANGE) .brightPointerPaint(Color.YELLOW) // .darkPointerPaint(Color.web("#0000FF", 0.5)) .secondPointerPaint(Color.RED) .running(true) .build(); clockTokyo.setPrefSize(120, 120); Clock clockEst = ClockBuilder.create() .timeZone("EST") .secondPointerVisible(true) .autoDimEnabled(true) .daylightSavingTime(true) .theme(Clock.Theme.BRIGHT) .clockStyle(Clock.ClockStyle.IOS6) .brightBackgroundPaint(Color.web("#0000FF", 0.7)) // .darkBackgroundPaint(Color.web("#0066FF", 0.3)) .darkTickMarkPaint(Color.ORANGE) .brightPointerPaint(Color.YELLOW) // .darkPointerPaint(Color.web("#5500FF", 0.8)) .secondPointerPaint(Color.RED) .running(true) .build(); clockEst.setPrefSize(120, 120); Clock clockCet = ClockBuilder.create() .timeZone("CET") .secondPointerVisible(true) .autoDimEnabled(true) .daylightSavingTime(false) .theme(Clock.Theme.BRIGHT) .clockStyle(Clock.ClockStyle.IOS6) .brightBackgroundPaint(Color.web("#0000FF", 0.5)) // .darkBackgroundPaint(Color.WHITE) .darkTickMarkPaint(Color.web("#0066FF", 0.5)) .brightPointerPaint(Color.YELLOW) // .darkPointerPaint(Color.web("#0066FF", 0.5)) .secondPointerPaint(Color.RED) .running(true) .build(); clockCet.setPrefSize(120, 120); Clock clockNz = ClockBuilder.create() .timeZone("NZ") .secondPointerVisible(true) .autoDimEnabled(true) .daylightSavingTime(false) .theme(Clock.Theme.BRIGHT) .clockStyle(Clock.ClockStyle.IOS6) .brightBackgroundPaint(Color.web("#0000FF", 0.3)) // .darkBackgroundPaint(Color.WHITE) .darkTickMarkPaint(Color.ORANGE) .brightPointerPaint(Color.YELLOW) // .darkPointerPaint(Color.web("#0000FF", 0.5)) .secondPointerPaint(Color.RED) .running(true) .build(); clockNz.setPrefSize(120, 120); Text tokyo = new Text("東 京"); // tokyo.setFill(Color.WHITE); tokyo.setFont(new Font(24)); tokyo.setFill(Color.GOLDENROD); Text est = new Text("New York"); // est.setFill(Color.WHITE); est.setFont(new Font(20)); est.setFill(Color.BLUE); Text cet = new Text("Berlin"); // cet.setFill(Color.WHITE); cet.setFont(new Font(22)); cet.setFill(Color.ORANGE); Text nzst = new Text("Wellington"); // nzst.setFill(Color.WHITE); nzst.setFont(new Font(20)); nzst.setFill(Color.YELLOW); StackPane stack = new StackPane(); Rectangle background = new Rectangle(720, 280); background.setFill(Color.web("#0000FF", 0.5)); stack.getChildren().add(background); // Layout final GridPane pane = new GridPane(); pane.setPadding(new Insets(5)); pane.setHgap(5); pane.setVgap(5); pane.setAlignment(Pos.TOP_CENTER); // Add controls to the layout pane.add(clockTokyo, 1, 1); pane.add(tokyo, 1, 2); GridPane.setHalignment(tokyo, HPos.CENTER); pane.add(clockEst, 2, 1); pane.add(est, 2, 2); GridPane.setHalignment(est, HPos.CENTER); pane.add(clockCet, 3, 1); pane.add(cet, 3, 2); GridPane.setHalignment(cet, HPos.CENTER); pane.add(clockNz, 4, 1); pane.add(nzst, 4, 2); GridPane.setHalignment(nzst, HPos.CENTER); stack.getChildren().add(pane); Group g = new Group(); g.getChildren().add(stack); primaryStage.setScene(new Scene(g, 720, 280)); primaryStage.show(); } }