CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

JavaFX

“第3章 問題 15 : 画像変換の並列化” リベンジ

エピソード IV - 新たなる希望 画像変換の遅延評価を並列化する第3章の問題15 で synchronizedを入れただけで、私のマシンでは20%遅くなった 私のマシンのコア数は4つなので、並列化しても挽回ならず結局遅くなってしまった(残念…) と書いたが、何も考えず…

第4章 JavaFX による GUI プログラミング : 問題 10 : ブラウザ

問題 WebViewerを使用して、URLバーと戻るボタンを持つブラウザを実装せよ 解答 やってみましょう public void start(Stage stage) throws Exception { // 末端のコントロール Button backButton = new Button("戻る"); TextField urlField = new TextField(…

第4章 JavaFX による GUI プログラミング : 問題 9 : アニメーション

問題 惑星を表す円をアニメーション化して、楕円軌道を回るようにせよ 解答 絵はしょぼいですが、やってみましょう public void start(Stage stage) throws Exception { final double rX = 200; final double rY = 160; final double cX = rX + 24; final do…

第4章 JavaFX による GUI プログラミング : 問題 8 : FXML

問題 FXML ファイルを解析する際には、JavaFX 固有の知識は必要ない JavaFX で何もせずに、入れ子になっているオブジェクトを持つオブジェクトをロードし、FXML 構文でプロパティを設定する例を作成せよ 注入を使用できれば、さらに良い 解答 この問題も、出…

第4章 JavaFX による GUI プログラミング : 問題 7 : CSS

問題 CSS を使用しないで、コントロールの境界を設定する方法を調べよ 境界について “境界” というのは、下の図(CSS Box Model)の Border だよね CSS はNodeクラスに適用できるが、Border プロパティを持っているのはNodeの派生クラスのRegionである Borde…

第4章 JavaFX による GUI プログラミング : 問題 6 : レイアウト

問題 BorderPaneの Top と Bottom の配置をセンタリングせよ サンプル BorderPaneは5つのエリア(Node)を持っている 5つのエリアにボタンを配置すると public void start(Stage stage) throws Exception { BorderPane pane = new BorderPane(); pane.setTop…

第4章 JavaFX による GUI プログラミング : 問題 5 : ObservableValue とラムダ式

問題 次の二つのメソッドを実装せよ public static <T,R> ObservableValue<R> observe(Function<T,R> f, ObservableValue<T> t) public static <T,U,R> ObservableValue<R> observe(BiFunction<T,U,R> f, ObservableValue<T> t, ObservableValue<U> u) このメソッドは、与えられたObservableValueのg</u></t></t,u,r></r></t,u,r></t></t,r></r></t,r>…

第4章 JavaFX による GUI プログラミング : 問題 4 : バインディング

問題 本文のサンプルコード “常に中心に配置される円” を 常に中心に配置され、四辺の少なくとも二つに接する に拡張せよ 解答 “常に中心に配置される円” のコードは以下のとおり import static javafx.beans.binding.Bindings.*; public void start(Stage s…

第4章 JavaFX による GUI プログラミング : 問題 3 : JavaFX Property の遅延作成その2

問題 ほとんどがデフォルトから変化しない多くの JavaFX プロパティを持つクラスで、デフォルトではない値に設定されたり、初めてxxxProperty()メソッドが呼び出されたときにプロパティオブジェクトを作成するようにせよ 解答 本文にあったGreetingクラスとT…

第4章 JavaFX による GUI プログラミング : 問題 2 : JavaFX Property の遅延作成

問題 チャートやテーブルといった多くの JavaFX プロパティを持つクラスでは、ほとんどのプロパティにリスナーが登録されない可能性が高い 従って、プロパティごとにプロパティオブジェクトを持つのは無駄である 最初は普通のフィールドを使用してプロパティ…

第4章 JavaFX による GUI プログラミング : 問題 1 : テキストフィールドとラベル

問題 テキストフィールドとラベルを持つプログラムを実装せよ ラベルのテキストは "Hello, JavaFX"、フォントは100ポイント ユーザーがテキストフィールドを編集したらラベルのテキストを連動して更新する 解答 これこそ、まさに練習問題ですね :-) ついでに…

第3章 ラムダ式を使ったプログラミング : 問題 15 : 画像変換の並列化

問題 LatentImageクラスに操作の並列化機能を追加せよ 解答 LatentImageクラスの Nested Class であるTransformedPixelReaderはスレッドセーフではないので、スレッドセーフな派生クラスを定義する まずTransformedPixelReaderのフィールドを全てprivateから…

第3章 ラムダ式を使ったプログラミング : 問題 14 : PixelReader による画像変換の拡張

問題 ピクセル単位の遅延評価を扱うため、今までの画像変換を変更して、画像内の任意のピクセルを読み込むことができるPixelReaderを渡すようにせよ 色だけを参照する単純な変換であるグレイスケール変換は (x, y, reader) -> reader.getColor(x, y).graysca…

第3章 ラムダ式を使ったプログラミング : 問題 13 : 畳み込みフィルターの遅延処理

問題 ぼやけ検出あるいはエッジ検出といった畳み込みフィルターは、隣接するピクセルから一つのピクセルを計算する 畳み込みフィルターを扱えるように LatentImage クラスを機能強化せよ 解答 まずColorTransformerを拡張した畳み込みフィルターの関数型イン…

第3章 ラムダ式を使ったプログラミング : 問題 11 : 色変換の合成

問題 二つのColorTransformerを合成するメソッドを実装せよ さらにUnaryOperator<Color>から、X座標とY座標を無視するColorTransformerを生成するメソッドを実装せよ 解答 この本には “static メソッド” と指定してあったが、私が最もふさわしいと思う場所、即ちCol</color>…

第3章 ラムダ式を使ったプログラミング : 問題 8 : 画像変換の生成

問題 画像に任意の幅と任意の色の枠を追加するColorTransformerを生成するメソッドを実装せよ 解答 ColorTransformerは、第3章 ラムダ式を使ったプログラミング : 問題 5 : 座標を考慮した画像変換 - CUBは子供の白熊 で以下のように定義した @FunctionalInt…

第3章 ラムダ式を使ったプログラミング : 問題 6 : パラメータ付き画像変換

問題 6 画像変換で、UnaryOperator<Color>ではなくBiFunction<Color, T, Color>を引数にとる transform メソッドを実装せよ 画像変換のオリジナルは 第3章 ラムダ式を使ったプログラミング : 画像変換 - CUBは子供の白熊 を参照 解答 これで変換関数にパラメータを渡すことができる。</color,></color>…

第3章 ラムダ式を使ったプログラミング : 問題 5 : 座標を考慮した画像変換

問題 画像変換を、色だけでなく座標も参照するように拡張する。 そのために以下の関数型インターフェースを導入する。 @FunctionalInterface interface ColorTransformer { Color apply(int x, int y, Color colorAtXY); } 画像の周りの10ピクセルを灰色の枠…

第3章 ラムダ式を使ったプログラミング : 画像変換

3章の本文では、ラムダ式の応用として 画像の個々のピクセルの色の変換する 画像変換のサンプルが載っている。 このときに使用する関数型インターフェースはUnaryOperator<Color>である。 ■ 変換前と変換後の画像を表示 public class ImageDemo extends Application</color>…