簡単な作品として、右のような電卓を作成します。
この作品を作る方法は、幾通りもあるでしょう。
しかし、変更などや再利用を考慮すると、作り方は絞られます。
まずこの電卓のフレームで、作品のサイズなどを決定するクラスを作ります。
また、これが作品のmainがあるクラスです。
このクラスの名前をSimpleCalculatorとします。
このフレームで使うパネルに、計算に使う数値入力用のテキストフィールド、
ボタンや計算結果を表示するラベルなどを配置します。
そして、そのボタン用のインターフェイスをimplementsします。
さてこのパネルのプログラムは、ボタンなどの部品の配置と、
各ボタンのクリックインターフェイスの実装に
分かれます。
そしてこのインターフェイスも機能は、計算対象の数値入力用のボタンと、
演算用のボタン用に分けることができます。
クラスの作り方は、色々と考えられるでしょうが、ここではこれらプログラムの
処理内容により分けて、後々の変更や再利用しやすいようにクラスを検討します。
それにより、『ボタンの配置と、数値入力用ボタンのインターフェイス実装』用クラスを
SimpleCalcPanelの名前とし、
このクラスを派生させて、『演算関連ボタンのインターフェイスを実装』用
クラスをNomalCalcPanelの名前で作ります。
以上で決めた作品のクラス図を以下に示します。

| クラス名 | 機能 | 
|---|---|
| SimpleCalculator | 概観用のフレームで、NomalCalcPanelオブジェクトを配置する | 
| SimpleCalcPanel | ボタンを配置して、数値入力用ボタンのActionListenerを実装 | 
| NomalCalcPanel | SimpleCalcPanelのサブクラスで、演算用ボタンのActionListenerを実装 | 
作品用に、workのパッケージを使います。
Java言語の初心者であれば、次のような初期の実験プログラムから作成して、
少しずつ実装するとよいでしょう。
SimpleCalculator.javaのコードを示します。
package work;
import java.awt.BorderLayout;
import java.awt.Container;// 入れ物のクラス
import javax.swing.*;
public class SimpleCalculator extends JFrame {
	Container container = getContentPane();
	SimpleCalcPanel panel = new NomalCalcPanel();
	
	public SimpleCalculator() {
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setTitle("SimpleCalculator");
		this.container.add( panel, BorderLayout.CENTER);
		//this.setResizable(false);//【1】ユーザがこのフレームのサイズを変更できなく設定します。
		this.setBounds(0, 0, 250, 250);//フレームサイズ指定
		this.setVisible(true);
		
		this.setAlwaysOnTop(true);//ほかのすべてのウィンドウの手前に表示されるように、最前面ウィンドウへ設定します
	}
	
	public static void main(String[] args) {
		JFrame f = new SimpleCalculator();
	}
}
上記で注目すべきは、SimpleCalcPanelのpanelフィールドで
NomalCalcPanelのオブジェクトを管理している点です。
これにより将来、演算処理がNomalCalcPanelと異なる操作を行なう(例えば
優先順位考慮など)クラスに変更する場合、SimpleCalcPanelの
サブクラスであれば、簡単にここだけ変更すれば可能となりす。
以下に、SimpleCalcPanel.javaのコードを示します。
package work;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class SimpleCalcPanel extends JPanel implements ActionListener{
	JButton []btnNumb = new JButton[11];// 数字用
	JButton []btnOp = new JButton[6];	//オペレーション用ボタン
	JLabel lbl1 = new JLabel("0");
	JTextField txt1 = new JTextField("");
	
	public SimpleCalcPanel(){
		for(int i = 0; i  < btnNumb.length-1; i++){
			this.btnNumb[i] = new JButton("" + i);//数字表示ボタン生成
			this.add(this.btnNumb[i]);
		}
		this.btnNumb[10] = new JButton(".");
		this.add(this.btnNumb[10]);
				
		btnOp[0] = new JButton("+/-");
		btnOp[1] = new JButton("/");
		btnOp[2] = new JButton("*");
		btnOp[3] = new JButton("-");
		btnOp[4] = new JButton("+");
		btnOp[5] = new JButton("=");
		for(int i = 0; i  < btnOp.length; i++){
			this.add(this.btnOp[i]);//オペレーションボタン追加
		}
		this.add(this.lbl1);
		this.lbl1.setBackground(new Color(255, 255, 100));//ラベルの背景色設定
		this.lbl1.setOpaque(true);//ラベルを「不透明な」設定にします。
		this.lbl1.setHorizontalAlignment(SwingConstants.RIGHT);//右よせで文字列を表示
		this.lbl1.setFont(new Font(null, Font.BOLD, 24));
		this.add(this.txt1);
		this.txt1.setHorizontalAlignment(SwingConstants.RIGHT);//右よせで文字列を表示
		this.txt1.setFont(new Font(null, Font.BOLD, 24));
	}
	public void actionPerformed(ActionEvent e){
		//キー入力用ボタン処理記述予定
	}
}
初期の確認用コードとしては、このように、部品を配置しているだけでよいでしょう。
SimpleCalculatorのサイズを固定にする場合は、この
にチェックを付けてください。これで【1】のコメントのコードが有効になります。
以下に、この時のNomalCalcPanel.javaコードを示します。
package work;
import java.awt.event.*;
import javax.swing.*;
public class NomalCalcPanel extends SimpleCalcPanel // implements ActionListener
{
//	public void actionPerformed(ActionEvent e){
//演算用用ボタン処理記述予定
//	}
}
SimpleCalcPanelのActionListener実装は、後で行う予定なので、始めはコメントにしてください。