各種 GUI 部品と利用例
GUI 部品の紹介
いろいろありますが、メジャーなものは Palette に出ているので、詳しい使い方は API document や市販テキストを探しましょう。
ここでは主な部品の紹介だけリストしておきます。
末端コンポーネント
- javax.swing.JButton: ボタン
- javax.swing.JLabel: 文字列を表示するだけ。編集 UI は備えない。
- javax.swing.JTextField: 一行テキストを表示・編集など可能
- javax.swing.JTextArea: 複数行テキスト領域を表示・編集など可能
- javax.swing.JList: 選択リスト
- javax.swing.JComboBox: いわゆるプルダウンメニュー
- javax.swing.JCheckBox: チェックボックス
他にも、javax.swing.JRadioButton, javax.swing.JToggleButton, javax.swing.JTextPane, javax.swing.JEditorPane など様々あります。
ダイアローグ機能用コンポーネント
- javax.swing.JFileChooser: ファイル選択用コンポーネント
- showdialog() メソッドで、ダイアローグとして実行。
- javax.swing.JColorChooser: 色選択
- javax.swing.JOptionPane: 簡単なユーザ入力用dialog
コンテナ系
- javax.swing.JFrame: タイトルバー付きのトップレベルウィンドウ。
- 中身は、get/setContentPane()で設定されたコンテナに配置。
- Menubar は、get/setJMenuBar() で設定されたjavax.swing.JMenuBarを利用
- javax.swing.JPanel: 他の要素を含むための標準的なコンテナ。
- javax.swing.JScrollPane: スクロールバー付きのコンテナ。
- 例えば、JTextArea をこのなかに配置して使うと便利。
他にも javax.swing.JSplitPane, javax.swing.JTabbedPane などもあります。
つかってみる
いくつか便利そうな機能を使ってみました。
- 画像アイコン付きのボタンを表示
- アプリケーションメニューを利用
paintComponent()
をつかって、Image を描画paintComponent()
とBufferedImage
をつかって描画内容をイメージファイルに保存- @swjava(javax.swing.JFileChooser) をつかって、ファイル選択
プログラムはいつもの git repository にあります。
- JFrame 相当の SampleMix
- DrawPanel 相当の SampleDrawPanel
画像アイコン付きボタン
ボタンにアイコンを設定するのは簡単で、javax.swing.ImageIconを設定するだけです(こちら)。
Eclipse, InteliJ 両方とも、Designer 上でボタンのプロパティで icon 設定するだけです。
アプリケーションメニュー
こちらは、メニューの構造を作成しないといけないのですが、こんな感じで、 javax.swing.JMenuBarにjavax.swing.JMenuを配置していきます。
Eclipse の Window Builder では、GUI 上で指定できました。
Image の描画
2ステップに分かれますが、それほど面倒ではありません。
-
画像の読み込み
- 画像ファイルを javax.imageio.ImageIO クラスで読み込んで、java.awt.image.BufferedImage に変換しています。
- こんな感じ
-
画像の描画
- java.awt.image.BufferedImage があれば、あとは Graphics2D の
drawImage(Image)
メソッドをつかって、普通に描画するだけです。 - こんな感じ
- java.awt.image.BufferedImage があれば、あとは Graphics2D の
描画内容のファイルへの保存
BufferedImage への書き込みも、Graphics2D
を用いれば簡単です。
いつもの paintComponent(Graphics)
を使えば描画可能です。
あとは、BufferedImage をファイルに書き込むだけ。
JFileChooser
せっかくだから、ファイルにデータを保存したいですよね。
javax.swing.JFileChooser を使えば、普段 OS のファイルマネージャーをつかっている感じで、ファイル選択可能です。
拡張子指定したい場合は、それも可能です。
こちら の例は、こんな感じです。
- メニューもしくはボタンで download 指定すると、
saveImg()
がイベントハンドラから呼ばれる。 - JFileChooser が立ち上がって、ファイル選択
- この例では、拡張子が “png” になるか、ユーザがファイル選択を止めるまでファイル選択が繰り返す
- png ファイルが指定されたら、あとは、先ほど実装した「描画内容のファイルへの書き込み」を呼び出すだけ。