javax.swing.JFrame

目的
Swingを使った簡単なGUIアプリケーションを作る。

関連クラス

今回のソース
//////////////////// jframe.java ////////////////////

class jframe
{
	public static void main(String args[])
	{
		new MainWindow();
	}
}

////////////////////////////////////////////////////////////

//////////////////// MainWindow.java ////////////////////

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MainWindow extends JFrame
{
	public MainWindow()
	{
		setTitle("Swing Test");

		// Windowリスナの登録
		WindowListener w_listener = new WindowAdapter()
		{
			public void windowClosing(WindowEvent we)
			{
				System.exit(0);
			}
		};
		addWindowListener(w_listener);

		// イメージ付きラベルの作成
		ImageIcon icon = new ImageIcon("image/coffee.gif");
		JLabel label = new JLabel("コーヒーいる?",icon,JLabel.CENTER);

		// イメージ付きボタンの作成
		ImageIcon button_icon = new ImageIcon("image/circle.gif");
		JButton button_ok = new JButton("Please",button_icon);
		button_ok.setMnemonic('p');

		button_icon = new ImageIcon("image/cross.gif");
		JButton button_cancel = new JButton("No Thank you",button_icon);
		button_cancel.setMnemonic('n');

		// buttonのアクションリスナ登録
		ActionListener listener_button_ok = new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				{
					JOptionPane.showMessageDialog(MainWindow.this,"YES!","Yes!",JOptionPane.INFORMATION_MESSAGE);
				}
			}
		};

		ActionListener listener_button_cancel = new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				{
					JOptionPane.showMessageDialog(MainWindow.this,"NO!","No Thank you.",JOptionPane.INFORMATION_MESSAGE);
				}
			}
		};

		button_ok.addActionListener(listener_button_ok);
		button_cancel.addActionListener(listener_button_cancel);

		// フレームへコンポーネントを配置する
		getContentPane().add(label,BorderLayout.NORTH);
		getContentPane().add(button_ok,BorderLayout.WEST);
		getContentPane().add(button_cancel,BorderLayout.EAST);

		// ウインドウサイズを、コンポーネントのサイズに合わせる
		pack();

		// 表示
		setVisible(true);
	}
}

////////////////////////////////////////////////////////////

Source is here. (ZIP Format,2029Byte,Shift-JIS)

コンパイル&実行
javac jframe.java
java jframe

説明
(概略)

とりあえず、以下に実行イメージを示します。

実行イメージ

これを見ればわかるように、Swingを使えば、
容易にImage付きのボタンなどを作れることがわかると思います。
同じプログラムを、Visual C++などで作ろうと思っても、
恐らく簡単には作れないでしょう。
それほど、Swingは強力なツールだと思います。
プログラム自体は、最高にくだらないです。(ごめんなさい)

(サンプルプログラムの説明)

Windowリスナの登録
Windowsリスナは、登録されたウインドウを見張るものです。
ウインドウの状態を監視することで、各種のイベント処理を行うことが出来ます。
また、WindowAdapterクラスを用いることで、WindowEvent中の
必要なイベントについてのみ、処理を行わせることが出来ます。
button_ok.setMnemonic('p');
このメソッドを呼び出すと、一種のショートカットを実現することが出来ます。
Windows上で実行した場合には、この場合、Alt+pでボタンを押したのと同じ効果が得られます。
buttonのアクションリスナの登録
Windowリスナの登録とほぼ同じです。
アクションリスナが登録されたコンポーネントは、
その状態を監視され、イベント処理を行うことが出来ます。
JOptionPane.showMessageDialog(MainWindow.this,"YES!","Yes!",JOptionPane.INFORMATION_MESSAGE);
このメソッドは、Swingで用意されている既製のダイアログを表示します。
親フレームの指定は、thisではなく、MainWindow.thisで行っていますが、
この理由として、ここで生成したActionListenerクラスは、内部クラス(Internal Class)
なので、スコープが届かず、thisで参照することは出来ないからです。

定義済みダイアログの利用

4番目の引数を変えることによって、アイコンを変更することが出来ます。
getContentPane().add(label,BorderLayout.NORTH);
JFrameにコンポーネントを追加する場合には、
このgetContentPaneメソッドで、Containerオブジェクトを受け取り、
そのaddメソッドを呼び出すことで実現します。