Swing (IntelliJ)
ここでは、Swing + IntelliJ Community の使い方を見ていきます。
GUI プログラムを作成する際、 完成GUI画面を見ながら、画面構成をするためのツールがいくつかあります。
IntelliJ では、Swing UI Designer というのがあります。
実際のプログラム作成過程を見ながら、使い方を見てもらえばよいかと。
プログラム例
以下は、鎌田の作成した簡単なペイントツールです。 といっても、四角形を書けるだけですが。
主な構成部品は
- PaintTool2: アプリ本体, GUI tool で作成したもの。
- CustomView: 自作のDraw系コンポーネント(ペイント画面相当、Drawで説明)
だけです。
GUI tool で作成したのは、PaintTool2 の方です。
IntelliJ でみると、src directory 中に PaintTool2 というdirectory みたいなものがあり、その中に、class と (GUI) form が入っています。GUI form (実際には、こんな感じの XML ファイルで画面構成をおこなうと、PaintTool2 クラスに、「勝手に」部品初期化メソッドが追加される感じです。
なので、クラス単体では動作せず、IntelliJ の中で、form ファイルと一体で動作する形になっています。(class file + form file でも動作)
Viewの構成
View の説明ということで、PaintTool2を紹介します。Designer をつかって、画面構成を作成していきます。
あらかじめ、後述の CustomView は作成してあると思っておいてください。
このプログラムですが、以下の手順で作成しました。
- 1: File→New→Swing UI Designer→GUI Formを選択、クラス名 (PaintTool2)を指定し、Create Bound Classを指定。Layout は、今回はBoarderLayout選択。(git に登録するか聞かれますが、お好きにどうぞ)- PaintTool2という「くくり」で、form ファイルとクラスが作成されました。
- form で、GUI の設定をおこなうと、対応クラスに、対応するコンポーネント用フィールドや Listener および、コンポーネントの初期化コード(ユーザには直接見えません。設定を変更して、File→Seetings→Editor→GUI Designerで、Generate GUI into:を Binary class ではなく、Java source codeにすると、初期化ルーチンが見えるようになります)が準備されるようになります。
 

- 2: GUI Form で、 Windows 内部のメイン Panel を作成することになります。Form 中の JPanel を選んで、名前(contentPane)を付けます。(上図)- 対応クラスにも対応フィールドが生まれたかと。
 
- 3: CustomView を配置してみましょう。
- 注:- CustomView.javaを事前にコンパイルしておく必要があります。「金づちマーク (build project)」を押して、コンパイルを済ませておきましょう。
- Form の Palette から Non-Palette Component を選んで、Class: CustomView(1. で準備済みのクラス)を画面中央に配置します。
- cuttomViewというフィールド名もつけておきます。
- サイズも設定しておきましょう。property 一覧で、show expert properties で、preferredSize を600, 400` とかにしておきましょう。
- 将来的には、mouse listener なども追加することになります。
 
- 4: 画面下側のパネルを配置すべく、まずはPalette からJPanelを画面の下側に。- layout: FlowLayotにしておきます。
 
- layout: 
- 5: 今度は、先ほどの操作用JPanelの中に、ボタンを二つ配置します。Component Tree 上で、JPanelを選択してから、JButtonをdrag & drop する方が確実かも。- property editor 上で、フィールド名もbtnReset,btnUndoにしました。ボタンの文字も、reset,undoに変更。
 
- property editor 上で、フィールド名も

- 6: ちなみに、この時点で対応クラスをみても、フィールド名が並んでいるだけ。
- 7: form 画面に戻って、event handler をボタンに登録しましょう。
- ボタンを選んで、右クリック、「create listener」→「actionListener」を追加し、OKです。対応クラスに、Listener が追加されます。
- これを、undo,resetボタンの両方に加える。
- 同様に、customViewにもMouseListener (MousePressed, MouseReleased)やMouseMotionListener (MouseDragged)を追加しています。
 
- ボタンを選んで、右クリック、「create listener」→「actionListener」を追加し、
これで、画面構成&ハンドラ生成ができました。(ハンドラの中身は、自分で書かないとですけどね。)
ただ、対象クラスを実行するにも、 main method がないので作成します。
- 8: 対象クラスのトップ(メソッド内などで無い場所)にカーソルをおいた状態で、Menu から Code→Generate(ショートカットキーもある)で、form mainを選ぶと、当該 contentPane を設定したJFrameを作成するためのメソッド群が生成されます。- フレームのタイトルとか、適時修正してもらえばよいかと。
- この段階で、PaintTool2を右クリックして、run main()すると、立ち上がるはずです。まだ、イベントハンドラの中身からですけど。