== ウインドウの表示 ==

Swingを使ってウインドウを表示するプログラムを示します。

 {{{#!java
 import javax.swing.*;

 public class Sample1
 {
 	public static void main(String[] args)
 	{
 		JFrame f;
 		
 		f = new JFrame();
 		f.setVisible(true);
 	}
 }
 }}}

1行目ではimport文でswingパッケージを利用することを示しています。

実際の処理は
9行目でJFrameクラスのインスタンスを作成し
作成したインスタンスに対し10行目でsetVisibleメソッドを行います。

 * JFrameクラスの'''インスタンスを作成'''することでウインドウが作成されます。
 * setVisible(true)メソッドは、その'''ウインドウを表示'''(見えるように)します。

 . {{attachment:swing01.png}}

このプログラムを実行すると、小さなウインドウが1つ表示されます。

マウス操作によりウインドウに対して次を行うことができます。
 * 最小化
 * 最大
 * ウインドウサイズの変更
 * 位置の変更

ウインドウを閉じても、プログラムは実行中のままです。

プログラムを終了するにはjavaコマンドを入力した画面でctrlを押したままでCを押します。('''Ctrl+C'''と記述)

プログラムを終了すればウインドウも消えます。
----
=== ウインドウを閉じることとプログラムの終了 ===

ウインドウを閉じたときに、プログラムを終了すべきか実行中のままとするかの選択は、
プログラムにまかせるべきです。

2つのウインドウを表示するプログラムを示します。
 {{{#!java
 import javax.swing.*;
 
 public class Sample2
 {
 	public static void main(String[] args)
 	{
 		JFrame f, g;
 		
 		f = new JFrame();
 		f.setVisible(true);
 		f.setTitle("- f -");
 		f.setSize(200, 300);
 		
 		g = new JFrame();
 		g.setVisible(true);
 		g.setTitle("- g -");
 		g.setSize(300, 100);
 	}
 }
 }}}
setTitleメソッドはウインドウのタイトルを文字列で指定します。

setSizeメソッドはウインドウの大きさを横、縦の数値で指定します。

 . {{attachment:swing02.png}}
2つのインスタンスがそれぞれのウインドウに対応しています。
 . {{attachment:swing03.png}}
動作をシーケンス図であらわしたものです。
 . {{attachment:swing07.png}}
mainメソッドからインスタンスが作成されたときに、新たなスレッドとして動作を始めます。

親のスレッドが終了したときは子のスレッドも終了します。

子のスレッドが終了したからといって親スレッドは終了しません。
----
特定のウインドウが閉じられたときに、プログラムを終了するようにもできます。

上記のプログラムで fのウインドウが閉じられたときにプログラムを終了するには
次の行を追加します。
 {{{
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }}}
これを追加すると
 1. fのウインドウを閉じると親スレッドが終了します。
 2. 親スレッドが終了するとgのスレッドも終了しgのウインドウも閉じます。
gのウインドウを閉じたときは終了しません。
----
補足

環境によっては、ウインドウのバーが見えないほど上部に表示されることがあるようです。

次を追加することで、ウインドウの表示位置を指定できます。
 {{{
f.setLocation(80,50);
 }}}
引数は、横位置、縦位置です。