2014

SwingNode と TextFlow

JavaFX

このエントリーは、JavaFX Advent Calendar 2014, 11日目のおまけです。

昨日は @toruwest さんの「JavaFXのTreeViewでアニメーションしてみる」でした。

明日は @skrb さんの「Java Advent Calendarと一緒になにか書きます」です。

今年も JavaFX でいろいろなことを楽しんだのでそのうちの一部を紹介します。

はじめに、Swing では JTextPane ってのがあって普通の JTextArea よりも柔軟に扱えます。

テキストのスタイルを簡単に変更できたりしてとても便利でした。

JavaFX に JTextPane に相当するものがあるかと言えば無さそうです。

編集できなくて表示だけなら TextFlow がかなり強力に使えます。

私は TextFlow を使うのを躊躇ってなんとか JTextPane を JavaFX で使ってやろうと SwingNode に手を出してしまいました。

何をしたかったかというとテキスト検索で検索文字にヒットしたらその文字を良く解るように色づけ、太字表示をしたかっただけです。

SwingNode は javafx.embed.swing.SwingNode クラスでこれを使うには

public void setContent(JComponent content)

で Swing コンポーネントをセットします。

ただし、JavaFX アプリケーションスレッドを使わずに

public static void invokeLater(Runnable doRun) メソッドを使用して

doRun.run()を、AWTイベント・ディスパッチ・スレッドで非同期的に実行させます。

このメソッドは実際は java.awt.EventQueue.invokeLater()を呼び出しているだけです。

Swing コンポーネントの操作をするときには面倒だけど AWT のスレッドでってことのようです。

はっきり言ってよっぽどの事情がないかぎり SwingNode なんて使おうと思わない。(^_^;)

いつも通り雑なサンプルプログラムを載せておきます。

プログラムの実行結果は次のようになります。

1

2

3

4

 

いちおう動くけど見栄えが良いものではありませんね。

ちなみに私は疑り深い人間なので試しに AWT のスレッドを使わなければ本当に駄目?なのか試してみました。

コンパイルは通りました。

実行時エラーでも出るのかなと思いきや何も起こりませんでした。

このような小さなプログラムでははっきりした不具合が出ないようです。

裏を返せば非常に危険だということになるのかな?

もう一つ気がかりなことは時々プログラムの起動時に黒くなってしまうことがあります。

やっぱり何か無理があるのかもしれない。(単なるバグだと思う。)

そんなこんなでせっかく JavaFX でプログラム組むんだから古い Swing なんて面倒な思いしてまで使いたくないよね!

そこで TextFlow を使ってみることにしました。

TextFlow は JTextPane と違って編集ができません。

ただ表示するだけです。

使い方も至って簡単です。

javafx.scene.text.Text クラスのインスタンスを生成しそれにテキスト及び書式を設定します。

その Text オブジェクトを TextFlow インスタンス生成時のコンストラクタの引数として渡してあげればいいだけです。

もしくは textFlow.getChildren().add(text); として TextFlow インスタンスに加えることもできます。

簡単に使えてスタイルの自由度も JtextPane より遙かに高いので使い道はあるかと思います。

Text のスタイルは public final void setStyle(String value) を使って設定します。

引数はインライン CSS を与えるだけのお手軽仕様です。

TextFlow を使ったサンプルプログラムも載せておきます。

このプログラムの実行結果は次のようになります。

5

2

7

8

 

やっぱ JavaFX オンリーでつくったプログラムのほうが見栄えがいいですね!

それにしても JavaFX っておもしろいね!

この二つのサンプルプログラムでは JavaFX Night で櫻庭さんが例を挙げていたようなことをこの二つのプログラムでやっています。

TextField と TextArea に文字が入力されてなければトグルボタンを非活性化にし、文字が入力されたら活性化させることを Bind を使って実装してみました。

       search.disableProperty()
                .bind(
                        Bindings.when(textArea.textProperty().isEmpty().or(textField.textProperty().isEmpty()))
                        .then(true)
                        .otherwise(false));

Java らしくない気がしないでもないですが便利です。

あっ、つまり検索してから TextArea か TextField をどちらかのテキストを空にしてしまったら Clear できないってことになるな。

まっ、いいか。

トグルボタン使っちゃったからなぁ・・・

ただのサンプルなのでそこらへんは見逃してくださいまし!(>_<。)

JavaFX 楽しい!

Hatena タグ:

JavaFXでマウスホイールを使ってのズームインズームアウトは可能か?

JavaFX

Twitter で面白そうなネタを見つけたので JavaFX で可能か?

どうすればいいのか?

MouseWheelEventクラスってあったけ?と疑問に思いつぶやいたところお忙しい中 @skrb さんから可能だと教えてもらいました。

もともとは「MouseWheelEventクラスってあったけ?」と大ボケをかましていたので話にならないのですが・・・ (^_^;)

そこで ImageView で試してみました。

ちなみに ScrollEvent を使うので MouseWheelEventクラスなんてものは存在しません。

ただし、タッチインタフェースのジェスチャーにも対応しているとのことで先月頭を悩ませた問題が再び襲ってくるのかと一抹の不安が脳裏を横切りました。

これも後で試してみます。

まずは ImageView で!

TilePane にImageView を二つ並べてマウスホイールで左だけ拡大縮小できるようにしてみました。

Ctrl キー、 Shift キーそれぞれを押しながらホイール操作した場合は拡大縮小比率を変更するようなおまけも付加しました。

このプログラムを実行すると下図のようにホイールで操作が可能となりました。

1

2

3

 

ただ、不可解なことに Shift キーを押しながらの処理が機能しませんでした。

Ctrl キーは問題なく機能します。

随分悩んだのですが違う PC で実行すると何の問題もない。

キーボードの設定か何かだろうか?

ちなみにスクロール量は OS 側のマウスの設定で変わってきます。

スクロールの向きも OS 側の設定になるようです。(当たり前か・・)

ではこれからが本題です。

BOX 3D オブジェクトを表示させるプログラムを組んでみます。

マウスドラッグで BOX 3D オブジェクトをグリグリさせるようにします。

そこで BOX 3D オブジェクト とカメラの距離をマウスホイールで変更させます。(カメラを移動)

ここで大きな問題が発生します。

今時の PC はタッチパネル対応の OS が搭載されてきてます。

JavaFX も Swing では無かったタッチインタフェースが標準で用意されています。

タッチドラッグによって BOX 3D オブジェクトをグリグリ動かすことができます。

つまり、マウスホイールだけでなくタッチによるスクロールまで発生してしまいます。

タッチによるスクロール、タッチによるドラッグ  あれれ、これじゃグリグリしながら拡大縮小してしまうじゃん。

どうしたものか悩んだ末に次のようなプログラムを組みました。

これでいいのかどうかは解りません。

だってタッチインタフェース使った記事って少ないしましてや 3D となると尚更ですから。

タッチカウントと慣性スクロールイベントで拡大縮小処理を行うかどうか判断させています。

box.setOnScroll(sc -> {

    if (sc.getTouchCount() == 0 && !sc.isInertia()) {

        double x = sc.getX();
        double y = sc.getY();
        double scaleBase = sc.isControlDown() ? 10.0 : sc.isShiftDown() ? 5.0 : 1.0;
        scale += (sc.getDeltaY() / 1_000) * scaleBase;
    }

    cam.setTranslateZ(zPos.doubleValue() * scale);

});

この方法しか思いつかなかった。(>_<。)

正しい方法をご存じでしたら教えてください!

ちなみにこのプログラムの実行結果は次のようになります。

4

5

 

とりあえずマウスホイール使えてめでたし!めでたし!

JavaFX おもしろいね!

Hatena タグ:

VAIO株式会社 VAIO Pro 13 購入

Computer

私にとって3代目のノート PC の購入となりました。

本当は SONY の VAIO がよかったのですが・・・買うタイミングを先送りした結果こうなりました。

SONY から売り払われた会社として VAIO株式会社として VAIO ブランドを存続させてます。

世間では投資ファンドは転売で利益を得るのが常套手段と知られています。

少し不安はあったものの、私が購入したモデルは SONY のモデルとほぼ変わらないので品質的には同等だろうと判断して購入にいたりました。

ただ、 SONY 製の至れり尽くせりのプリインストールアプリは皆無です。

購入時にそれらを何処かでダウンロードしてインストールできるか確認したところ待つこと10分少々・・・

結局できないとのことでした。

Xperia Link とか SONY のオーディオ関係の優れたソフトは欲しかった。

本当に何もない素っ気ない状態です。

PC TV with nasne(TM)の無料クーポン券はキャンペーン期間中だったのでもらえるらしいです。

さて、それでは届いた VAIO Pro 13 の第一印象レビューです。

こんな段ボールの箱で送られてきました。

1

 

SONY ストアで購入したからか SONY の梱包用テープが使われています。

何故か売り払った PC 事業の会社の製品を販売しています。

私の誤算は株主優待で 5パーセント引きをあてにしていたのですが別会社となってしまったのでそれが適用されなかったことです。

それに、10月からは5パーセント引きのクーポンが配られることでした。

本当に購入時期を失敗した。みごとなまでに・・・(>_<。)

この色気の無い箱を開けてみます。

SONY ストアでの購入明細書とお礼のメッセージカードが入ってました。

2

 

さらに箱の中からまた箱が

3

 

中国製であることを示す段ボール箱がでてきたのでさらに開けてみます。

中にはとりあえず読んどいてねってような紙切れがありました。

4

 

さらにこの箱を開けます。

シックなイメージの化粧箱がやっと姿を見せてくれました。

5

 

化粧箱を開けてみます。

箱の中は二段重ねになっていて上段にに VAIO Pro 13 本体があり

下段にはアクセサリーが入ってました。

6

 

化粧箱の中身を全部出してみました。

本当に必要な物だけって感じです。

いろんなソフトメーカーの試供品や宣伝広告なんかは一切ありません。

昔だったらプロバイダーの勧誘広告とか PC 関連の広告がウザいくらいあったのに変われば変わるものですね。

7

 

VAIO を開いてみて少し驚きました。

黒い洒落た VAIO のロゴが入ったクロスがキーボードの上に挟んでありました。

8

 

黒い化粧箱に黒いクロスに黒しか選べない VAIO って・・・

まるで   お葬式仕様と呼んでも過言ではない!

ちょっと洒落にならなくなるのでさっきのは取り消しで (^_^;

さて、AC アダプターなんですが USB 給電ポートがついてます。

これはありがたいですね!

9

 

そうそう、VAIO株式会社からお礼と日本の小さな PC メーカーになったことが記されたカードが入ってました。

日本といっても生産は中国で安曇野で完成品検査をして出荷する形式をとっているだけですよね。

これを「安曇野 FINISH」と呼んでいるようです。

製品開発はどうなっているのかは謎ですけどね。

10

11

 

化粧箱の中にはさっきのカードを含め簡易取扱説明書、保証書などが入ってました。

12

 

今まで使っていた VAIO type F と並べてみました。

一回り小さいですね。

13

 

ただし、オールインワンの VAIO type F は重い!

それに比べ Ultrabook の VAIO Pro 13 は軽い!

違いを計ってみました。

14

15

 

その差 1.9 キログラム 体感的にも全然ちがいます。

こんなに軽くてちゃんと動いてくれるのか?

早速試してみました。

最新の Java 言語を使って素数を求める並行処理プログラムを走らせてみました。

16

 

さすが16コア32スレッドの CPU を搭載しているだけあって爆速ですね!

 

 

すみません。冗談です!許してくんなまし。

私が購入した VAIO のスペックは以下のようになっています。

Windows 8.1 Update 64ビット

インテル(R) Core(TM) i7-4510U プロセッサー
2 GHz (最大3.10 GHz)
3次キャッシュメモリー:4 MB
拡張版 Intel SpeedStep テクノロジー搭載、HTテクノロジー対応

8 GB (オンボード) / 8GB デュアルチャンネル転送

13.3 型ワイド (16:9) Full HD 1920 x 1080 静電式タッチパネル

SSD 約256 GB (256 GB x 1) PCI Express x 4

ストレージがむちゃくちゃ速いです!

私が所有しているデスクトップ PC (SSD)より速いです!

メモリーは 4GB でも問題はないと思ったけど後から増やすことができない仕様なので 8GB にしました。

タッチパネルも必要ないかなって思っていたのですがプログラミングでタッチ API を使うことがあるかもしれないので選択しました。

色が黒しか無いのが残念でしたがサクサク動くしひっかかることもないので安心しました。

まだ今日届いたばかりでそんなに使ってないのですがバッテリーが減りにくいですね。

いろいろセットアップやバックアップやアプリのインストールとかしていてもほとんど減りません。

コントロールパネルで電源の設定を確認したところバランスとなっていたので省電力にしたらもっともつのかな?

VAIO type F の場合4時間位しかバッテリーがもたなかったので省電力化の技術もかなり進歩したことを実感しています。

良いことばかり書きましたが少しネガティブなことも書いておきます。

私はメインで使っているデスクトップ PC はかなり大きめのファンノイズを出すのであまり気になりませんが

この VAIO Pro 13 は VAIO type F と比べるとファンの音が少しします。

このファンの音は静かな PC を望まれている方にはかなり不快な音となることかもしれません。

VAIO type F はかすかに聞こえるときがたまにあるという感じに対し、VAIO Pro 13 は、はっきりとファンが仕事してるぜ!と回り出してきます。

薄く軽く高パフォーマンス仕様とのトレードオフと割り切らなくてはいけませんね。

まだ使い込んでいないけど良い買い物だったと思う。

最後に日本の小さな PC メーカーとなった VAIO株式会社が今後どのような製品をリリースしていくか楽しみですね。

 

Hatena タグ:

NetBeans IDE から SSH 接続で GitHub を使ってみた。

Java NetBeans Ubuntu

お盆休みも今日が最後になったのにダラダラして終わることになった。(^_^;

ビール飲んでグダグダしながらこんなことを今さらしていたので記念にエントリーしておく。

最初に GitHub に新しいリポジトリを作成する。

そしてまだ SSD 公開鍵を設定してなければ設定しておく。

1

 

NetBeans IDE で新規プロジェクトを作成する。

2

 

Git ローカルリポジトリを作成する。

3

 

ローカルリポジトリを作成する場所を指定する。

4

 

出力ウィンドウでローカルリポジトリが作成されたことが解る。

5

 

プロジェクトウィンドウでもリポジトリのバッジが付いたことが確認できる。

6

 

HelloGitHub.java ファイルを add する。

7

 

そしてコミットする。

8

 

コミットされるファイルを確認し、解りやすいメッセージを書いておく。

GitHub は公開だと全世界と繋がるので地球標準の英語でメッセージを書いておくと良いことがあるかもしれない。

9

 

ローカルリポジトリにコミットした状態を Git リポジトリ・ブラウザで確認。

まだ寂しい状態であることが一目で解りますね。(ちょっと表現がおかしいけど気にしない。プレミアム・モルツのせいだ!)

10

 

それではリモートリポジトリにプッシュしましょう。

11

 

はじめてリモートリポジトリに接続する場合は下図のように必要事項を設定します。

これは SSH 接続を利用しています。(OpenSSH)

一度設定してしまえば後はラクチン、ラクチンです。

12

 

接続が完了すると下図のような画面が表示されます。

16

 

チェックをいれて次へ進めます。

17

 

終了ボタンを押してプッシュを実行します。

18

 

リモートリポジトリへのプッシュが完了したことを Git リポジトリ・ブラウザで確認します。

19

 

疑り深い人は GitHub のサイトをブラウザで開いて確認してみてください。

20

 

さらにソースコードを編集します。

21

 

変更されたことが色づけとバージョンラベルで確認できます。

22

 

さっきと同様にローカルリポジトリをコミットします。

23

 

そしてリモートリポジトリへプッシュします。

今度は先ほど設定したリモートリポジトリが選択されているので「次へ」ボタンを押すだけです。

24

 

25

 

26

 

さて、疑り深い人は GitHub のサイトをブラウザで開いて確認ですね。

27

 

完璧ですね。

28

 

ついでに履歴も確認。

29

 

30

 

NetBeans IDE で Git をそれなりに使うには十分ですね。

ただ、大規模なプロジェクトだと専用のツールを使ったほうが痒いところに手が届きます。

必要十分な機能は備えているみたいなんでやっぱり NetBeans IDE は素晴らしい!

Hatena タグ: ,,

Ubuntu で Java を使うためにすること

Java Ubuntu

完全無欠の自分用のφ(..)メモメモです。

Linux よく解らないので適当にやってます。

間違ってる、もしくはおかしなことをやっている可能性大なので何かの拍子に「ゆっちのBlog」にたどり着いた方はご注意くださいませ。

 

Oracle の Java をインストールします。

スクリーンショットのようにコマンドを入力していけば簡単にインストールできます。

a1

 

a2

 

a3

 

Java SE 7 をインストールします。

a4

 

確認画面が表示されます。

a5

 

ライセンスに同意できるなら <はい> を選択してインストールを進めます。

a6

 

インストール完了です。

a7

 

次に、Java SE 8 をインストールします。

a8

 

これも簡単にインストールが終了します。

a9

 

update-alternatives コマンドを使うために help を表示させてみましょう。

b1

 

では、java で登録されているものを表示させてみます。

さっきインストールした Java SE 7 と Java SE 8 が登録されてます。(勝手に!)

b2

 

では、open JDK でビルドした自家製?の Java を登録してみます。

c1

 

もう一度 java で登録リストを表示させてちゃんと登録できているか確認します。

ちゃんと登録できてます!

c2

 

ついでに javac も登録しておきましょう。

c4

 

update-alternatives –config <登録名> で対話式で切り替えが可能となります。

今回はこれを使いたくないので削除します。

java を削除して確認します。

削除されたのでエラーが表示されました。

d1

 

同様に javac も削除し、確認します。

d2

 

Java と javac のバージョン確認コマンドを打ち込みます。

パスが設定されていないので次のようになります。

e1

 

パスを設定するために ~/.bashrc を編集します。

これ root になってやってしまったけど一般ユーザーでできるはず。

f1

 

私の場合次のような環境設定をしました。

JAVA_HOME はインストールした場所によって変わりますのでご自分の環境にあわせて Path 設定をおこなってください。

f2

 

確認です。

g1

h1

 

はっきりいって面倒くさい!

Windows の PATH 設定のほうが遙かに楽だね。

Linux で GUI 操作によって簡単に設定を変更できるものがあるかもしれないけどネットでググったら

update-alternatives –config <登録名> で変更している人がほとんどだった。

 

おまけ

Linux は使いづらくて取っつきにくいという印象がありますよね。

それを少しでも緩和するために私は moebuntu という素晴らしいものを導入しました。

下の画像は私のデスクトップのスクリーンショットです。

これだけ見ると Windows より Ubuntu の勝ちです! (^_^;

Screenshot from 2014-08-03 20_18_12

Hatena タグ: ,

« 古い記事 新しい記事 »