Gleyzer両氏によって共同開発されました。2019で、同言語の発表を行いました。InfoQはPurdy氏に言語と、氏らが解決を目指した問題について聞きました。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。2.0の代表的な機能を紹介していきましょう。前回、示した代表的機能を再掲します。前編ではUIコントロールまでを紹介したので、後編でメディア以降の機能について説明していきます。メディアJavaが弱い分野の1つにメディアがあります。(JMF)がありますが、どちらもここ数年はまったく更新されていません。Technologiesと提携し、メディア関連APIの強化を行いました。TechnologiesはGoogleに買収されてしまったのです。2.0ではメディア関連APIを白紙の状態から作り直しを余儀なくされてしまいました。現状、JavaFXがサポートしているメディアのフォーマットを以下に示します。1.xの使い方を引き継いでいます。メディアを表すのがMediaクラス、メディアを再生するのがMediaPlayerクラスです。サウンドはMediaPlayerクラスだけで再生可能ですが、ムービーの場合表示を行なうMediaViewクラスを使用します。いずれもjavafx.scene.mediaパッケージで定義されています。moviePlayer.play();MediaクラスのコンストラクタにはメディアのURLを指定します。現状、サポートしているプロトコルはhttp:とfile:の2種類です。MediaPlayerクラス以外に、ゲームの効果音などに使用できるAudioClipクラスも提供されています。clip.play();現状ではサポートされているコーディックが少ない、ストリーミングに対応していないなど、機能的にはまだ不十分なのですが、今後拡充されていく予定です。CSSHTMLで見栄えを定義するために使用されるCSSですが、HTMLだけでなくリッチクライアントでも見栄えを変更するために使用することができます。JavaFXでも1.xの頃からCSSによって描画を変化させることが可能です。CSSを使用するには、HTMLと同様にJavaFXでもスタイルを埋めこむ手法と、スタイルシートファイルを読み込む手法があります。ここではよく使用されるファイルとして読み込む方法を紹介します。スタイルシートはSceneオブジェクトに対してセットします。button3.setId("button3");CSSは次のように記述します。5;}Buttonクラスなどの描画要素はCSSのクラスとして扱われます。CSSのIDを使用したい場合はsetIdメソッドでIDを指定しておきます。ここではButton3だけ違ったスタイルにしています。図1にCSSによる描画の変化を示しました。CSSによる描画の変化バインド前回、紹介したようにバインドは変数同士を自動的に同期させるための機構です。Scriptではバインドを言語レベルでサポートしていました。2.0ではJavaの言語仕様を変更できないため、APIでバインドを実現しています。バインドには高レベルAPIと低レベルAPIがあります。高レベルAPIは簡単に使えますが、複雑な同期には使いづらく、またパフォーマンスも低レベルAPIに比べると劣っています。低レベルAPIは逆にパフォーマンスが高く、複雑な同期も可能ですが、記述が長くなってしまいます。JavaFXのクラスのメソッドを見てみると、メソッド名がPropertyで終っているメソッドがあります。四角を表すRectangleクラスではxPropertyメソッドやyPropertyメソッドが定義されています。これらのメソッドで取得できるプロパティがバインドの対象となります。高レベルAPIを使用したバインドは次のように記述します。ここでは四角のx座標と、スライダの値をバインドさせています。rect.xProperty().bind(slider.valueProperty());スライダの値を変化させると四角のx座標が自動的に同期します。これにより、図2に示したように四角が移動します。低レベルAPIではBindingインタフェースを使用します。実際にバインドする場合は、Bindingインタフェースの実装クラスがプロパティの型に応じた提供されているので、これらのクラスを使用します。四角の色をRGBを表す3つのスライダの値とバインドしてみます。色はColorクラスで表すので、ObjectBindクラスを使用してバインドを行ないます。rect.fillProperty().bind(binding);3個のスライダのいずれでも値を変更するだけで、図3に示したように四角の色が変化します。低レベルAPIによるバインドの例アニメーションアニメーションは使いやすいUIを構成する上で欠かせない機能です。JavaFXでも、アニメーションは重要な機能の1つです。アニメーションは時間軸を設定し、決められたタイミングで描画要素の状態を変化させたり、処理を行なわせることで実現します。JavaFXでは時間軸をTimelineクラス、決められたタイミングで行なう処理をKeyFrameクラスで表します。KeyFrameクラスは、オブジェクトの状態を変化させるためのKeyValueクラス、処理を記述するEventHandlerインタフェースを用いてオブジェクトを生成します。アニメーションをスタートさせるにはTimelineクラスのplayメソッドをコールします。timeline.play();この例では、四角をx軸方向に移動させるアニメーションを実行します。Timelineクラスを使用することでアニメーションは記述できますが、記述は少々煩雑です。そこで、移動やフェードなどよく使用されるアニメーションを簡単に記述するためのTransitionクラスも提供されています。移動はTranslateTransitionクラス、フェードであればFadeTransitionクラスを使用します。円を2秒間かけて非透明から透明にする場合は次のように記述します。transition.play();図4は複数の円をフェードイン、フェードアウトさせているサンプルアプリケーションです。サンプルは公開していますので、ぜひ試してみてください。フェードの例エフェクト描画要素に対して影をつけたり、ぼかしたりする効果をエフェクトと呼びます。エフェクトもUIではなくてはならない要素の1つです。2Dを使わなくてはならず、記述が冗長になってしまいました。それに対しJavaFXでは簡潔に記述することが可能です。コントロールやイメージ、四角や円などさまざまな描画要素に対しても、すべて同一の手順でエフェクトを付加することができます。イメージに対して、明るくするエフェクトを施す場合、次のように記述します。Bloom());setEffectメソッドの引数の型はEffectクラスです。エフェクトに応じてEffectクラスのサブクラスが提供されており、ここでは明るくするエフェクトを行なうBloomクラスを使用しています。その他の代表的なエフェクトを図5に示しました。代表的なエフェクト非同期処理UIの処理は通常シングルスレッドで行ないます。これはAWTでもSwingでも同じです。イメージのロードなど描画に比べて時間がかかる処理を行なうと、UIの処理がストップしてしまいます。そこで、時間のかかる処理は、UIのスレッドとは別のスレッドでバックグラウンドで非同期で行なうようにします。SwingではSwingWorkerクラスでバックグランド処理を記述することができます。JavaFXの場合、バックグラウンドで非同期に行なう処理はTaskクラスで記述します。Taskクラスのexecuteメソッドがバックグラウンドで処理されます。処理の結果はgetメソッドで取得することができます。イメージのロードをバックグラウンドで行なう場合、次のように記述します。Imageクラスにはバックグラウンドでイメージをロードする機能があるので、通常はそちらを使用します。task.start();イメージのロードなどのI/O処理は描画に比べると時間がかかります。いう場合でも処理をバックグラウンドで行なうことでUIの応答速度を損なうことなく処理を行なうことができます。時間を要する計算などもバックグラウンドで行なうべきです。JavaFXでは、バックグラウンド処理を簡単に記述できるので、ぜひ活用したいところです。上記のコードではTaskクラスを使用していますが、JavaFX2.0の正式版ではTaskクラスは変更される予定になっています。同じように非同期処理を扱えるようになるはずです。連携を考える場合、SwingのUIにJavaFXを埋めこむことと、JavaFXのUIにSwingを埋めこむことの両方が考えられます。JavaFXでは前者、つまりSwingのUIにJavaFXを埋めこむことだけがサポートされます。SwingにJavaFXのシーングラフを埋めこむために、Swingのコンポーネントであり、かつシーングラフのためのコンテナとなるJFXPanelクラスが提供されています。}}注意すべき点として、SwingとJavaFXでは処理のためのスレッドが異なるということがあげられます。SwingのスレッドではJavaFXにはアクセスせず、またJavaFXのスレッドではSwingにアクセスしないようにします。比較のため、図6にSwingのコンポーネントと、JavaFXのUIコントロールを並べてみました。見た目がずいぶん違うことが分かります。2.0の機能を見てきましたが、これ以外にもシーングラフを記述しやすくするビルダー、HTTP通信、JSONパーサーなど多くの機能を提供しています。Java以外の言語からJavaFXを使用する今までは、JavaFXの機能を紹介してきました。その一方、JavaFXがJavaのライブラリになったことによる利点もあります。VM上で動作する多くの言語でJavaFXが扱えるようになったことです。VM上で動作する言語は多くあります。これらの言語の多くは、Javaのライブラリを扱えるようになっています。このため、JavaFXも使用できるようになったのです。World!を記述してみます。値のように記述することができます。Scriptのように宣言的にUIの構造を表すことが可能です。GroovyのBuilderという機能を使用すると、より宣言的に記述することも可能です。2.0はリリースまでに3つの段階が設定されています。現在は、一般向けのベータが公開されていますが、その前の段階としてパートナー向けに公開されていました。その後、2011年の第3四半期にリリースが予定されています。予定していた機能の大部分は実装済みであり、現在は品質の向上を図っています。2.0のロードマップにありますので、ぜひご参照ください。Scriptを捨て、Javaのライブラリとして生まれ変わりました。これが吉と出るか、凶と出るかはまだ分かりません。2.0に移行するのは容易です。2.0は多く持っています。これらの機能を使うことで、効率的にリッチクライアントを構築していくことが可能です。その一方、リッチクライアントを構築するのに重要なデザイン面でのワークフローがまだ確立していないのも事実です。少なくともデザイナーが使用できるツールが不可欠です。これに対してOracleがどのような方策を取ってくるのか、注目していきたいと思います。本記事で使用したサンプルはすべてGitHubのInfoQJavaFXDemoリポジトリよりダウンロードすることができます。サンプルは文字コードがUTF-8となっています。ように文字コードを指定してください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。threadCSSが反映されません。CSSが反映されません。/CSSが反映されません。/スパムの可能性があると認識されました。モデレーターが確認し問題がなければ24時間以内に公開します。その際あなたへの通知は行われませんのでご了承ください。found.」と出てCSSが反映されません。netBeansの場合は、どのように動かせばCSSが使えるでしょうか。CSSが反映されません。/スパムの可能性があると認識されました。モデレーターが確認し問題がなければ24時間以内に公開します。その際あなたへの通知は行われませんのでご了承ください。記述している場合は、クラスファイルと同じディレクトリもしくはJARファイルに配置する必要があります。NetBeansの場合、srcディレクトリにCSSファイルを配置すれば、binディレクトリにコピーするので、実行できるはずです。ように指定することも可能です。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。