asaのブログ

プログラミングの勉強まとめ

UIを学ぶためのSwingHacks1

 オライリー社から出版されている”Java Swing Hacks”は素晴らしい本です。Swingに限らずUIについて意識すべき視点私たちに提供してくれます。

Java Swing Hacks ―今日から使える驚きのGUIプログラミング集

Java Swing Hacks ―今日から使える驚きのGUIプログラミング集

 

 

 また、JavaFX上でOpenGLを使用するにはSwingをNodeに埋め込む必要があります。Swingを学ぶことは古いので必要ないとは言えません。

 

 イメージ主体のUIコンポーネント

 JavaFXでも魅力的で強力なUIコンポーネントが提供されていました。

 JavaFX-メニューバーの作成 - asaのブログ

 ただしデフォルトの概観だけでは実現したいUIを提供できないこともあるでしょう。ここでは画像を使ってUIコンポーネントを構築します。

 

 使用するデフォルトのコンポートネントはフレームとパネルです。最初に気をつけなければならないのはコンポーネントの位置とサイズに万全を期すことです。

 コンストラクタではDimensionクラスを使用して高さと幅を画像のサイズに合わせています。その後優先サイズと最大サイズ、最小サイズを指定してレイアウトマネージャーを切って、適切に画像が表示されるようにします。

 

 

gista99f78608e1c6ff3e49fc19fd3303d76

 

gist631073f4836ba1aa845b351e3ff17575

 

 次の画面が表示されたら成功です。

 

 f:id:asa_r:20170526101403p:plain

 

 まとめ

 画像を使用してUIコンポートネントをリッチにしようと試みました。要点は下の通りです。

 

  1.  コンストラクタでコンポーネントの位置とサイズに万全を期す(優先サイズ、最大サイズ、最小サイズを意識する)。
  2.  その後、コンポーネントを描画する。
  3.  描画が正しくされるかテストする。

 

 課題

 1. コンポーネントの位置とサイズを自由に扱うには?

 ⇒paintComponentメソッドを使って位置を調整する。

 

 メモ

  • Javaで画像を使用するにはjava.awt.Imageをインポートする必要があります。
  • Dimensionはコンポーネントの幅と高さをカプセル化します。nullを渡すことで画像のサイズをそのまま受け継いでいます。
  • ここではレイアウトマネージャーを切って、優先されるサイズ、最大、最小サイズをメソッドを使って指定しています。
  • paintComponentメソッドはJComponentクラスのメソッドです。JPanelはJComponentクラスを継承しています。
  • Swingではpaintメソッドの中でさらにコンポーネントを描画するpaintComponentが読み出されます。コンポーネントを描画する際はpaintComponentを使います。