トップ «前の日記(2010年10月26日) 最新 次の日記(2010年11月04日)» 編集

Masa's blog

検索キーワード:

2010年11月02日 Java儂(わし)的解釈によるメモ(Swing編) [長年日記]

_ Java儂(わし)的解釈によるメモ(Swing編)

JavaでのGUIプログラミングに挑んでみる編。

JLabel(ラベル(文字列)表示)

//
// JLabelTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
// GUIの基本部品であるJLabel(ラベルオブジェクト)をラップする自前のクラス
//
class Label {
	//
	// JLabel(ラベルオブジェクト)の定義
	//
	JLabel object;
	//
	// コンストラクタ
	//
	//   JLabel(ラベルオブジェクト)の生成(ここでデザインの等の決定)
	//
	Label(String s){
		object = new JLabel(s);
	}
	//
	// JLabel(ラベルオブジェクト)の取得
	//
	JLabel getObject(){
		return object;
	}
}
//
// メインのクラス
//
class JLabelTestMain {
	public static void main(String [] args){
		JLabelTestMain m = new JLabelTestMain();
		//
		// JLabelの独自ラッパーオブジェクトの生成
		//
		Label lb = new Label("ラベル文字列");
		//
		// JLabelオブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にJLabelオブジェクトを配置する方法の設定
		//
		p.setLayout(new BorderLayout());
		//
		// パネル上にJLabelオブジェクトを配置
		//
		p.add(lb.getObject(), BorderLayout.CENTER);

		//
		// パネルを配置するためのフレーム(ウインドウ)を生成
		//
		JFrame f = new JFrame();
		//
		// パネルを閉じた時の動作を設定(終了)
		//
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//
		// フレーム上にパネルを配置する方法の設定
		//
		f.setLayout(new BorderLayout());
		//
		// フレームに関するもろもろの設定
		//
		f.setTitle("JLabelTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		//
		// フレームからコンテナ(表示領域)の取得
		//
		Container c = f.getContentPane();
		//
		// パネルをコンテナ上に配置
		//
		c.add(p, BorderLayout.CENTER);
		//
		// 余分な空白を詰め合わせる
		//
		f.pack();
		//
		// 可視化する
		//
		f.setVisible(true);
	}
}
  • フレームがGUIアプリケーションの土台となる。
  • フレーム全体にコンテナがかぶさっていて、実際にはこの上にパネルを配置する。
  • JLabel等のGUI部品パネル上に配置する。
  • パネル上にパネルを配置するのもあり。複雑なデザインを実現するには不可欠な手法。

絵にすると以下のような感じ...

   [GUIオブジェクト][GUIオブジェクト] ... [GUIオブジェクト]  ......       ......
  [                    パ  ネ  ル                          ][パネル] ... [パネル]
 [                                 コ  ン  テ  ナ                                ]
[                              フ    レ    ー    ム                               ]

JButton(単独のボタン)

//
// JButtonTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
// GUIの基本部品であるJButton(ボタンオブジェクト)をラップする自前のクラス
//
class Button {
	//
	// JButton(ボタンオブジェクト)の定義
	//
	JButton object;
	//
	// コンストラクタ
	//
	//   JButton(ボタンオブジェクト)の生成(ここでデザインの等の決定)
	//
	Button(String s){
		object = new JButton(s);
	}
	//
	// イベントハンドラの登録
	//
	void setListener(ActionListener eh){
		object.addActionListener(eh);
	}
	//
	// JButton(ボタンオブジェクト)の取得
	//
	JButton getObject(){
		return object;
	}
}
//
// イベントハンドラを定義する独自クラス(リスナーオブジェクト)
//
class Button_Listener implements ActionListener {
	//
	// Button(自前ボタンオブジェクト)の定義
	//
	Button so;
	//
	// コンストラクタ
	//
	//   イベントの発生元オブジェクトの設定
	//
	Button_Listener(Button so){
		this.so = so;
	}
	//
	// イベントハンドラ本体
	//
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println("OK1");
		}
	}
}
//
// メインのクラス
//
class JButtonTestMain {
	public static void main(String [] args){
		JButtonTestMain m = new JButtonTestMain();
		//
		// JButtonの独自ラッパーオブジェクトの生成
		//
		Button b = new Button("OK1");
		//
		// JButtonの独自ラッパーオブジェクトに対するイベントハンドラの登録
		//
		b.setListener(new Button_Listener(b));

		//
		// JButtonオブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にJButtonオブジェクトを配置する方法の設定
		//
		p.setLayout(new BorderLayout());
		//
		// パネル上にJButtonオブジェクトを配置
		//
		p.add(b.getObject(), BorderLayout.CENTER);

		//
		// パネルを配置するためのフレーム(ウインドウ)を生成
		//
		JFrame f = new JFrame();
		//
		// パネルを閉じた時の動作を設定(終了)
		//
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//
		// フレーム上にパネルを配置する方法の設定
		//
		f.setLayout(new BorderLayout());
		//
		// フレームに関するもろもろの設定
		//
		f.setTitle("JButtonTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		//
		// フレームからコンテナ(表示領域)の取得
		//
		Container c = f.getContentPane();
		//
		// パネルをコンテナ上に配置
		//
		c.add(p, BorderLayout.CENTER);
		//
		// 余分な空白を詰め合わせる
		//
		f.pack();
		//
		// 可視化する
		//
		f.setVisible(true);
	}
}
  • イベントハンドラの登録は JButtonオブジェクト.addActionListener(ActionListener イベントハンドラオブジェクト)
  • イベントハンドラオブジェクトは必ずActionListenerをインプリメントする。
  • イベントハンドラオブジェクト内にactionPerformed(ActionEvent e)の形式でイベントハンドラメソッドを定義する。

JRadioButton(ラジオボタン)

//
// JRadioButtonTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
// GUIの基本部品であるJRadioButton(ラジオボタンオブジェクト)をラップする自前のクラス
//
class RadioButton {
	//
	// JRadioButton(ラジオボタンオブジェクト)の定義
	//
	JRadioButton object;
	//
	// その他変数
	//
	String string;
	//
	// コンストラクタ
	//
	//   JRadioButton(ラジオボタンオブジェクト)の生成(ここでデザインの等の決定)
	//
	RadioButton(String s){
		object = new JRadioButton(s);
		string = s;
	}
	RadioButton(String s, Boolean b){
		if (b){
			object = new JRadioButton("[" + s + "]", b);
		}else{
			object = new JRadioButton(s, b);
		}
		string = s;
	}
	//
	// イベントハンドラの登録
	//
	void setListener(ChangeListener eh){
		object.addChangeListener(eh);
	}
	//
	// JRadioButton(ラジオボタンオブジェクト)の取得
	//
	JRadioButton getObject(){
		return object;
	}
	//
	// stringの取得
	//
	String getString(){
		return string;
	}
}
//
// イベントハンドラを定義する独自クラス(リスナーオブジェクト)
//
class RadioButton_Listener implements ChangeListener {
	//
	// RadioButton(自前ラジオボタンオブジェクト)の定義
	//
	RadioButton so;
	//
	// コンストラクタ
	//
	//   イベントの発生元オブジェクトの設定
	//
	RadioButton_Listener(RadioButton so){
		this.so = so;
	}
	//
	// イベントハンドラ本体
	//
	public void stateChanged(ChangeEvent e) {
		if (e.getSource() == so.getObject()){
			if (so.getObject().isSelected()){
				so.getObject().setText("[" + so.getString() + "]");
			}else{
				so.getObject().setText(so.getString());
			}
		}
	}
}
//
// メインのクラス
//
class JRadioButtonTestMain {
	public static void main(String [] args){
		JRadioButtonTestMain m = new JRadioButtonTestMain();
		//
		// JRadioButtonの独自ラッパーオブジェクトの生成
		//
		RadioButton rb1 = new RadioButton("apple", true);
		RadioButton rb2 = new RadioButton("orange");
		RadioButton rb3 = new RadioButton("lemon");
		//
		// JRadioButtonの独自ラッパーオブジェクトに対するイベントハンドラの登録
		//
		rb1.setListener(new RadioButton_Listener(rb1));
		rb2.setListener(new RadioButton_Listener(rb2));
		rb3.setListener(new RadioButton_Listener(rb3));
		//
		// JRadioButtonオブジェクトをグループ化
		//
		ButtonGroup bg = new ButtonGroup();
		bg.add(rb1.getObject());
		bg.add(rb2.getObject());
		bg.add(rb3.getObject());

		//
		// JRadioButtonオブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にJRadioButtonオブジェクトを配置する方法の設定
		//
		p.setLayout(new FlowLayout());
		//
		// パネル上にJRadioButtonオブジェクトを配置
		//
		p.add(rb1.getObject());
		p.add(rb2.getObject());
		p.add(rb3.getObject());

		//
		// パネルを配置するためのフレーム(ウインドウ)を生成
		//
		JFrame f = new JFrame();
		//
		// パネルを閉じた時の動作を設定(終了)
		//
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//
		// フレーム上にパネルを配置する方法の設定
		//
		f.setLayout(new BorderLayout());
		//
		// フレームに関するもろもろの設定
		//
		f.setTitle("JRadioButtonTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		//
		// フレームからコンテナ(表示領域)の取得
		//
		Container c = f.getContentPane();
		//
		// パネルをコンテナ上に配置
		//
		c.add(p, BorderLayout.CENTER);
		//
		// 余分な空白を詰め合わせる
		//
		f.pack();
		//
		// 可視化する
		//
		f.setVisible(true);
	}
}
  • イベントハンドラの登録は JRadioButtonオブジェクト.addChangeListener(ChangeListener イベントハンドラオブジェクト)
  • イベントハンドラオブジェクトは必ずChangeListenerをインプリメントする。
  • イベントハンドラオブジェクト内にstateChanged(ChangeEvent e)の形式でイベントハンドラメソッドを定義する。

JCheckBox(チェックボックス)

//
// JCheckBoxTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
// GUIの基本部品であるJCheckBox(チェックボックスオブジェクト)をラップする自前のクラス
//
class CheckBox {
	//
	// JCheckBox(チェックボックスオブジェクト)の定義
	//
	JCheckBox object;
	//
	// コンストラクタ
	//
	//   JCheckBox(チェックボックスオブジェクト)の生成(ここでデザインの等の決定)
	//
	CheckBox(String s){
		object = new JCheckBox(s);
	}
	//
	// イベントハンドラの登録
	//
	void setListener(ChangeListener eh){
		object.addChangeListener(eh);
	}
	//
	// JCheckBox(チェックボックスオブジェクト)の取得
	//
	JCheckBox getObject(){
		return object;
	}
}
//
// イベントハンドラを定義する独自クラス(リスナーオブジェクト)
//
class CheckBox_Listener implements ChangeListener {
	//
	// CheckBox(自前チェックボックスオブジェクト)の定義
	//
	CheckBox so;
	//
	// コンストラクタ
	//
	//   イベントの発生元オブジェクトの設定
	//
	CheckBox_Listener(CheckBox so){
		this.so = so;
	}
	//
	// イベントハンドラ本体
	//
	public void stateChanged(ChangeEvent e) {
		if (e.getSource() == so.getObject()){
			if (so.getObject().isSelected()){
				so.getObject().setText("ON");
			}else{
				so.getObject().setText("OFF");
			}
		}
	}
}
//
// メインのクラス
//
class JCheckBoxTestMain {
	public static void main(String [] args){
		JCheckBoxTestMain m = new JCheckBoxTestMain();
		//
		// JCheckBoxの独自ラッパーオブジェクトの生成
		//
		CheckBox cb = new CheckBox("OFF");
		//
		// JCheckBoxの独自ラッパーオブジェクトに対するイベントハンドラの登録
		//
		cb.setListener(new CheckBox_Listener(cb));

		//
		// JCheckBoxオブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にJCheckBoxオブジェクトを配置する方法の設定
		//
		p.setLayout(new BorderLayout());
		//
		// パネル上にJCheckBoxオブジェクトを配置
		//
		p.add(cb.getObject(), BorderLayout.CENTER);

		//
		// パネルを配置するためのフレーム(ウインドウ)を生成
		//
		JFrame f = new JFrame();
		//
		// パネルを閉じた時の動作を設定(終了)
		//
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//
		// フレーム上にパネルを配置する方法の設定
		//
		f.setLayout(new BorderLayout());
		//
		// フレームに関するもろもろの設定
		//
		f.setTitle("JCheckBoxTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		//
		// フレームからコンテナ(表示領域)の取得
		//
		Container c = f.getContentPane();
		//
		// パネルをコンテナ上に配置
		//
		c.add(p, BorderLayout.CENTER);
		//
		// 余分な空白を詰め合わせる
		//
		f.pack();
		//
		// 可視化する
		//
		f.setVisible(true);
	}
}
  • イベントハンドラの登録は JCheckBoxオブジェクト.addChangeListener(ChangeListener イベントハンドラオブジェクト)
  • イベントハンドラオブジェクトは必ずChangeListenerをインプリメントする。
  • イベントハンドラオブジェクト内にstateChanged(ChangeEvent e)の形式でイベントハンドラメソッドを定義する。

JList(選択一覧リスト)

//
// JListTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
// GUIの基本部品であるJList(選択一覧リスト)をラップする自前のクラス
//
class List {
	//
	// JList(選択一覧リストオブジェクト)の定義
	//
	JList object;
	//
	// コンストラクタ
	//
	//   JList(選択一覧リストオブジェクト)の生成(ここでデザインの等の決定)
	//
	List(String [] s){
		object = new JList(s);
	}
	//
	// イベントハンドラの登録
	//
	void setListener(ListSelectionListener eh){
		object.addListSelectionListener(eh);
	}
	//
	// JList(選択一覧リストオブジェクト)の取得
	//
	JList getObject(){
		return object;
	}
}
//
// イベントハンドラを定義する独自クラス(リスナーオブジェクト)
//
class List_Listener implements ListSelectionListener {
	//
	// List(自前選択一覧リストオブジェクト)の定義
	//
	List so;
	//
	// コンストラクタ
	//
	//   イベントの発生元オブジェクトの設定
	//
	List_Listener(List so){
		this.so = so;
	}
	//
	// イベントハンドラ本体
	//
	public void valueChanged(ListSelectionEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println(so.getObject().getSelectedValue());
		}
	}
}
//
// メインのクラス
//
class JListTestMain {
	public static void main(String [] args){
		JListTestMain m = new JListTestMain();
		//
		// JListの独自ラッパーオブジェクトの生成
		//
		String [] lists = {"apple", "orange", "lemon"};
		List ls = new List(lists);
		//
		// JListの独自ラッパーオブジェクトに対するイベントハンドラの登録
		//
		ls.setListener(new List_Listener(ls));

		//
		// JListオブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にJListオブジェクトを配置する方法の設定
		//
		p.setLayout(new BorderLayout());
		//
		// パネル上にJListオブジェクトを配置
		//
		p.add(ls.getObject(), BorderLayout.CENTER);

		//
		// パネルを配置するためのフレーム(ウインドウ)を生成
		//
		JFrame f = new JFrame();
		//
		// パネルを閉じた時の動作を設定(終了)
		//
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//
		// フレーム上にパネルを配置する方法の設定
		//
		f.setLayout(new BorderLayout());
		//
		// フレームに関するもろもろの設定
		//
		f.setTitle("JListTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		//
		// フレームからコンテナ(表示領域)の取得
		//
		Container c = f.getContentPane();
		//
		// パネルをコンテナ上に配置
		//
		c.add(p, BorderLayout.CENTER);
		//
		// 余分な空白を詰め合わせる
		//
		f.pack();
		//
		// 可視化する
		//
		f.setVisible(true);
	}
}
  • イベントハンドラの登録は JListオブジェクト.addListSelectionListener(ListSelectionListener イベントハンドラオブジェクト)
  • イベントハンドラオブジェクトは必ずListSelectionListenerをインプリメントする。
  • イベントハンドラオブジェクト内にvalueChanged(ListSelectionEvent e)の形式でイベントハンドラメソッドを定義する。

JSlider(スライダー)

//
// JSliderTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
// GUIの基本部品であるJSlider(スライダー)をラップする自前のクラス
//
class Slider {
	//
	// JSlider(スライダーオブジェクト)の定義
	//
	JSlider object;
	//
	// コンストラクタ
	//
	//   JSlider(スライダーオブジェクト)の生成(ここでデザインの等の決定)
	//
	Slider(int min, int max, int val){
		object = new JSlider(min, max, val);
	}
	//
	// イベントハンドラの登録
	//
	void setListener(ChangeListener eh){
		object.addChangeListener(eh);
	}
	//
	// JSlider(スライダーオブジェクト)の取得
	//
	JSlider getObject(){
		return object;
	}
}
//
// イベントハンドラを定義する独自クラス(リスナーオブジェクト)
//
class Slider_Listener implements ChangeListener {
	//
	// Slider(自前スライダーオブジェクト)の定義
	//
	Slider so;
	//
	// コンストラクタ
	//
	//   イベントの発生元オブジェクトの設定
	//
	Slider_Listener(Slider so){
		this.so = so;
	}
	//
	// イベントハンドラ本体
	//
	public void stateChanged(ChangeEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println(so.getObject().getValue());
		}
	}
}
//
// メインのクラス
//
class JSliderTestMain {
	public static void main(String [] args){
		JSliderTestMain m = new JSliderTestMain();
		//
		// JSliderの独自ラッパーオブジェクトの生成
		//
		Slider sl = new Slider(0, 100 , 50);
		//
		// JSliderの独自ラッパーオブジェクトに対するイベントハンドラの登録
		//
		sl.setListener(new Slider_Listener(sl));

		//
		// JSliderオブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にJSliderオブジェクトを配置する方法の設定
		//
		p.setLayout(new BorderLayout());
		//
		// パネル上にJSliderオブジェクトを配置
		//
		p.add(sl.getObject(), BorderLayout.CENTER);

		//
		// パネルを配置するためのフレーム(ウインドウ)を生成
		//
		JFrame f = new JFrame();
		//
		// パネルを閉じた時の動作を設定(終了)
		//
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//
		// フレーム上にパネルを配置する方法の設定
		//
		f.setLayout(new BorderLayout());
		//
		// フレームに関するもろもろの設定
		//
		f.setTitle("JSliderTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		//
		// フレームからコンテナ(表示領域)の取得
		//
		Container c = f.getContentPane();
		//
		// パネルをコンテナ上に配置
		//
		c.add(p, BorderLayout.CENTER);
		//
		// 余分な空白を詰め合わせる
		//
		f.pack();
		//
		// 可視化する
		//
		f.setVisible(true);
	}
}
  • イベントハンドラの登録は JSliderオブジェクト.addChangeListener(ChangeListener イベントハンドラオブジェクト)
  • イベントハンドラオブジェクトは必ずChangeListenerをインプリメントする。
  • イベントハンドラオブジェクト内にstateChanged(ChangeEvent e)の形式でイベントハンドラメソッドを定義する。

JTextField(一行テキスト入力)

//
// JTextFieldTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
// GUIの基本部品であるJTextField(一行テキスト入力)をラップする自前のクラス
//
class TextField {
	//
	// JTextField(一行テキスト入力オブジェクト)の定義
	//
	JTextField object;
	//
	// コンストラクタ
	//
	//   JTextField(一行テキスト入力オブジェクト)の生成(ここでデザインの等の決定)
	//
	TextField(String s, int col){
		object = new JTextField(s, col);
	}
	//
	// JTextField(一行テキスト入力オブジェクト)の取得
	//
	JTextField getObject(){
		return object;
	}
}
//
// GUIの基本部品であるJButton(単独ボタン)をラップする自前のクラス
//
class Button {
	//
	// JButton(単独ボタンオブジェクト)の定義
	//
	JButton object;
	//
	// コンストラクタ
	//
	//   JButton(単独ボタンオブジェクト)の生成(デザインの決定等)
	//
	Button(String s){
		object = new JButton(s);
	}
	//
	// イベントハンドラの登録
	//
	void setListener(ActionListener eh){
		object.addActionListener(eh);
	}
	//
	// JButton(単独ボタンオブジェクト)の取得
	//
	JButton getObject(){
		return object;
	}
}
//
// イベントハンドラを定義する独自クラス(リスナーオブジェクト)
//
class Button_Listener implements ActionListener {
	//
	// Button(自前単独ボタンオブジェクト)の定義
	// TextField(自前一行テキスト入力オブジェクト)の定義
	//
	Button so;
	TextField tf;
	//
	// コンストラクタ
	//
	//   イベントの発生元(等)オブジェクトの設定
	//
	Button_Listener(Button so, TextField tf){
		this.so = so;
		this.tf = tf;
	}
	//
	// イベントハンドラ本体
	//
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println(tf.getObject().getText());
		}
	}
}
//
// メインのクラス
//
class JTextFieldTestMain {
	public static void main(String [] args){
		JTextFieldTestMain m = new JTextFieldTestMain();
		//
		// JTextFieldの独自ラッパーオブジェクトの生成
		// JButtonの独自ラッパーオブジェクトの生成
		//
		TextField tf = new TextField("初期文字列", 20);
		Button b = new Button("Get!");
		//
		// JButtonの独自ラッパーオブジェクトに対するイベントハンドラの登録
		//
		b.setListener(new Button_Listener(b, tf));

		//
		// JTextFieldオブジェクト、JButtonオブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にJTextFieldオブジェクト、JButtonオブジェクトを配置する方法の設定
		//
		p.setLayout(new FlowLayout());
		//
		// パネル上にJTextFieldオブジェクト、JButtonオブジェクトを配置
		//
		p.add(tf.getObject());
		p.add(b.getObject());

		//
		// パネルを配置するためのフレーム(ウインドウ)を生成
		//
		JFrame f = new JFrame();
		//
		// パネルを閉じた時の動作を設定(終了)
		//
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//
		// フレーム上にパネルを配置する方法の設定
		//
		f.setLayout(new BorderLayout());
		//
		// フレームに関するもろもろの設定
		//
		f.setTitle("JTextFieldTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		//
		// フレームからコンテナ(表示領域)の取得
		//
		Container c = f.getContentPane();
		//
		// パネルをコンテナ上に配置
		//
		c.add(p, BorderLayout.CENTER);
		//
		// 余分な空白を詰め合わせる
		//
		f.pack();
		//
		// 可視化する
		//
		f.setVisible(true);
	}
}

JTextArea(複数行テキスト入力)

//
// JTextAreaTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
// GUIの基本部品であるJTextArea(複数行テキスト入力)をラップする自前のクラス
//
class TextArea {
	//
	// JTextArea(複数行テキスト入力オブジェクト)の定義
	//
	JTextArea object;
	//
	// コンストラクタ
	//
	//   JTextArea(複数行テキスト入力オブジェクト)の生成(デザインの決定等)
	//
	TextArea(String s, int row, int col){
		object = new JTextArea(s, row, col);
	}
	//
	// JTextArea(複数行テキスト入力オブジェクト)の取得
	//
	JTextArea getObject(){
		return object;
	}
}
//
// GUIの基本部品であるJButton(単独ボタン)をラップする自前のクラス
//
class Button {
	//
	// JButton(単独ボタンオブジェクト)の定義
	//
	JButton object;
	//
	// コンストラクタ
	//
	//   JButton(単独ボタンオブジェクト)の生成(デザインの決定等)
	//
	Button(String s){
		object = new JButton(s);
	}
	//
	// イベントハンドラの登録
	//
	void setListener(ActionListener eh){
		object.addActionListener(eh);
	}
	//
	// JButton(単独ボタンオブジェクト)の取得
	//
	JButton getObject(){
		return object;
	}
}
//
// イベントハンドラを定義する独自クラス(リスナーオブジェクト)
//
class Button_Listener implements ActionListener {
	//
	// Button(自前単独ボタンオブジェクト)の定義
	// TextArea(自前複数行テキスト入力オブジェクト)の定義
	//
	Button so;
	TextArea ta;
	//
	// コンストラクタ
	//
	//   イベントの発生元(等)オブジェクトの設定
	//
	Button_Listener(Button so, TextArea ta){
		this.so = so;
		this.ta = ta;
	}
	//
	// イベントハンドラ本体
	//
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println(ta.getObject().getText());
		}
	}
}
//
// メインのクラス
//
class JTextAreaTestMain {
	public static void main(String [] args){
		JTextAreaTestMain m = new JTextAreaTestMain();
		//
		// JTextFieldの独自ラッパーオブジェクトの生成
		// GUIの基本部品であるJScrollPaneオブジェクトの生成
		// JButtonの独自ラッパーオブジェクトの生成
		//
		TextArea ta = new TextArea("初期文字列", 5, 20);
		JScrollPane sp = new JScrollPane(ta.getObject());
		Button b = new Button("Get!");
		//
		// JButtonの独自ラッパーオブジェクトに対するイベントハンドラの登録
		//
		b.setListener(new Button_Listener(b, ta));

		//
		// JScrollPaneオブジェクト、JButtonオブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// JScrollPaneオブジェクト、JButtonオブジェクトを配置する方法の設定
		//
		p.setLayout(new FlowLayout());
		//
		// JScrollPaneオブジェクト、JButtonオブジェクトを配置
		//
		p.add(sp);
		p.add(b.getObject());

		//
		// パネルを配置するためのフレーム(ウインドウ)を生成
		//
		JFrame f = new JFrame();
		//
		// パネルを閉じた時の動作を設定(終了)
		//
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//
		// フレーム上にパネルを配置する方法の設定
		//
		f.setLayout(new BorderLayout());
		//
		// フレームに関するもろもろの設定
		//
		f.setTitle("JTextAreaTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		//
		// フレームからコンテナ(表示領域)の取得
		//
		Container c = f.getContentPane();
		//
		// パネルをコンテナ上に配置
		//
		c.add(p, BorderLayout.CENTER);
		//
		// 余分な空白を詰め合わせる
		//
		f.pack();
		//
		// 可視化する
		//
		f.setVisible(true);
	}
}

FlowLayout(フローレイアウト方式 - 左から右へ流し込み)

//
// JFlowLayoutTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
class Button {
	JButton object;
	String string;
	Button(String s){
		object = new JButton(s);
		string = s;
	}
	void setListener(ActionListener eh){
		object.addActionListener(eh);
	}
	JButton getObject(){
		return object;
	}
}
//
class Button_Listener implements ActionListener {
	Button so;
	Button_Listener(Button so){
		this.so = so;
	}
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println(so.string);
		}
	}
}
//
class JFlowLayoutTestMain {
	public static void main(String [] args){
		JFlowLayoutTestMain m = new JFlowLayoutTestMain();

		Button b1 = new Button("OK1");
		Button b2 = new Button("OK2");
		Button b3 = new Button("OK3");
		b1.setListener(new Button_Listener(b1));
		b2.setListener(new Button_Listener(b2));
		b3.setListener(new Button_Listener(b3));

		//
		// GUI部品オブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にGUI部品オブジェクトを配置する方法の設定
		//
		p.setLayout(new FlowLayout());
		//
		// パネル上にGUI部品オブジェクトを配置
		//
		p.add(b1.getObject());
		p.add(b2.getObject());
		p.add(b3.getObject());

		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new BorderLayout());
		f.setTitle("JButtonTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		Container c = f.getContentPane();
		c.add(p, BorderLayout.CENTER);
		f.pack();
		f.setVisible(true);
	}
}

BorderLayout(ボーダーレイアウト方式 - 東西南北中央)

//
// JBorderLayoutTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
class Button {
	JButton object;
	String string;
	Button(String s){
		object = new JButton(s);
		string = s;
	}
	void setListener(ActionListener eh){
		object.addActionListener(eh);
	}
	JButton getObject(){
		return object;
	}
}
//
class Button_Listener implements ActionListener {
	Button so;
	Button_Listener(Button so){
		this.so = so;
	}
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println(so.string);
		}
	}
}
//
class JBorderLayoutTestMain {
	public static void main(String [] args){
		JBorderLayoutTestMain m = new JBorderLayoutTestMain();

		Button b1 = new Button("North");
		Button b2 = new Button("East");
		Button b3 = new Button("South");
		Button b4 = new Button("West");
		Button b5 = new Button("Center");
		b1.setListener(new Button_Listener(b1));
		b2.setListener(new Button_Listener(b2));
		b3.setListener(new Button_Listener(b3));
		b4.setListener(new Button_Listener(b4));
		b5.setListener(new Button_Listener(b5));

		//
		// GUI部品オブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にGUI部品オブジェクトを配置する方法の設定
		//
		p.setLayout(new BorderLayout());
		//
		// パネル上にGUI部品オブジェクトを配置
		//
		p.add(b1.getObject(), BorderLayout.NORTH);
		p.add(b2.getObject(), BorderLayout.EAST);
		p.add(b3.getObject(), BorderLayout.SOUTH);
		p.add(b4.getObject(), BorderLayout.WEST);
		p.add(b5.getObject(), BorderLayout.CENTER);

		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new BorderLayout());
		f.setTitle("JButtonTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		Container c = f.getContentPane();
		c.add(p, BorderLayout.CENTER);
		f.pack();
		f.setVisible(true);
	}
}

GridLayout(グリッドレイアウト方式 - 格子状に配置)

//
// JGridLayoutTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
class Button {
	JButton object;
	String string;
	Button(String s){
		object = new JButton(s);
		string = s;
	}
	void setListener(ActionListener eh){
		object.addActionListener(eh);
	}
	JButton getObject(){
		return object;
	}
}
//
class Button_Listener implements ActionListener {
	Button so;
	Button_Listener(Button so){
		this.so = so;
	}
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println(so.string);
		}
	}
}
//
class JGridLayoutTestMain {
	public static void main(String [] args){
		JGridLayoutTestMain m = new JGridLayoutTestMain();

		Button b1 = new Button("OK1");
		Button b2 = new Button("OK2");
		Button b3 = new Button("OK3");
		Button b4 = new Button("OK4");
		Button b5 = new Button("OK5");
		Button b6 = new Button("OK6");
		b1.setListener(new Button_Listener(b1));
		b2.setListener(new Button_Listener(b2));
		b3.setListener(new Button_Listener(b3));
		b4.setListener(new Button_Listener(b4));
		b5.setListener(new Button_Listener(b5));
		b6.setListener(new Button_Listener(b6));

		//
		// GUI部品オブジェクトを配置するパネルの生成
		//
		JPanel p = new JPanel();
		//
		// パネル上にGUI部品オブジェクトを配置する方法の設定
		//
		p.setLayout(new GridLayout(3,2));
		//
		// パネル上にGUI部品オブジェクトを配置
		//
		p.add(b1.getObject());
		p.add(b2.getObject());
		p.add(b3.getObject());
		p.add(b4.getObject());
		p.add(b5.getObject());
		p.add(b6.getObject());

		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new BorderLayout());
		f.setTitle("JButtonTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		Container c = f.getContentPane();
		c.add(p, BorderLayout.CENTER);
		f.pack();
		f.setVisible(true);
	}
}

グラフィックス描画

//
// JGraphTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
// 描画の対象となるオブジェクト
//
class MyPanel extends JPanel {
	//
	// 描画に使用されるパラメータ
	//
	int x = 50;
	int y = 100;
	Graphics g;
	//
	// コンストラクタ
	//
	public MyPanel() {
		setBackground(Color.white);
	}
	//
	// イベントハンドラからのパラメータ設定
	//
	public void setXY(int x, int y) {
		this.x = x;
		this.y = y;
	}
	//
	// イベントハンドラからの再描画
	//
	public void repaint() {
		super.repaint();
	}
	//
	//
	//
	public Graphics getG() {
		return g;
	}
	//
	// 描画処理
	//
	public void paintComponent(Graphics g) {
		this.g = g;

		super.paintComponent(g);

		// ウィンドウ内に描画したい図形をここに書く
		g.setColor(Color.red);
		g.fillRect(x,y,100,100);
		g.drawRect(x+150,y,100,100);

		g.setColor(Color.black);
		g.drawLine(x+300,y,x+400,y+100);

		g.setColor(Color.gray);
		g.fillOval(x,y+140,100,100);
		g.drawOval(x+150,y+140,100,100);

		g.setColor(Color.black);
		g.drawString("Welcome to java graphics.", x-40, y-80);
	}
}

//
// イベントハンドラのオブジェクト
//
class MyPanel_Listener implements MouseMotionListener{
	//
	// イベントを受け取るオブジェクト
	//
	MyPanel p;
	//
	// コンストラクタ
	//
	public MyPanel_Listener (MyPanel p){
		this.p = p;
	}
	//
	// イベントハンドラ本体 for MouseMotionListener
	//
	public void mouseDragged(MouseEvent e) {
		if (e.getSource() == p){
			p.getG().setColor(Color.blue);
			p.getG().fillRect(e.getX(),e.getY(),400,400);
			p.setXY(e.getX(),e.getY());
			p.repaint();
		}
	}
	public void mouseMoved(MouseEvent e) {
	}
}

class JGraphTestMain {
	public static void main(String [] args){
		JGraphTestMain m = new JGraphTestMain();
		//
		// GUI部品ソースオブジェクトの生成
		//
		MyPanel p = new MyPanel();
		//
		// マウス用移動イベントハンドラの登録
		//
		p.addMouseMotionListener(new MyPanel_Listener(p));

		//
		// パネルを配置するためのフレーム(ウインドウ)を生成
		//
		JFrame f = new JFrame();
		//
		// パネルを閉じた時の動作を設定(終了)
		//
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//
		// フレーム上にパネルを配置する方法の設定
		//
		f.setLayout(new BorderLayout());
		//
		// フレームに関するもろもろの設定
		//
		f.setTitle("JButtonTest");
		f.setSize(640,480);
		f.setLocation(300,300);
		//
		// フレームからコンテナ(表示領域)の取得
		//
		Container c = f.getContentPane();
		//
		// パネルをコンテナ上に配置
		//
		c.add(p, BorderLayout.CENTER);
		//
		// 余分な空白を詰め合わせる
		//
		//f.pack();
		//
		// 可視化する
		//
		f.setVisible(true);
	}
}
  • 描画の対象となるオブジェクトはJPanelクラスを継承する。
  • 描画の対象となるオブジェクト内にpaintComponent(Graphics g)メソッドを定義し、その中で描画処理を行う。
  • 描画処理を行うpaintComponent(Graphics g)メソッドは直接呼び出さずに、親クラスであるJPanelrepaint()メソッドを呼び出す。

マウスイベント処理

//
// JMouseTestMain.java
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//
class Button {
	JButton object;
	Button(String s){
		object = new JButton(s);
	}
	void setListener(ActionListener eh){
		object.addActionListener(eh);
	}

	//
	// マウス用操作イベントハンドラの登録
	//
	void setMouseListener(MouseListener eh){
		object.addMouseListener(eh);
	}
	//
	// マウス用移動イベントハンドラの登録
	//
	void setMouseMotionListener(MouseMotionListener eh){
		object.addMouseMotionListener(eh);
	}

	JButton getObject(){
		return object;
	}
}
//
class Button_Listener implements ActionListener {
	Button so;
	Button_Listener(Button so){
		this.so = so;
	}
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println("OK1");
		}
	}
}

//
// マウス用操作リスナーオブジェクト
//
class Button_Mouse_Listener implements MouseListener {
	//
	// GUI部品ソースオブジェクト
	//
	Button so;
	//
	// コンストラクタ:処理するイベントの発生元GUIソースオブジェクトの設定
	//
	Button_Mouse_Listener(Button so){
		this.so = so;
	}
	//
	// イベントハンドラ本体 for MouseListener
	//
	public void mousePressed(MouseEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println("mousePressed at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY()));
		}
	}
	public void mouseReleased(MouseEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println("mouseReleased at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY()));
		}
	}
	public void mouseClicked(MouseEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println("mouseClicked at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY()));
		}
	}
	public void mouseEntered(MouseEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println("mouseEntered at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY()));
		}
	}
	public void mouseExited(MouseEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println("mouseExited at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY()));
		}
	}
}

//
// GUI部品マウス用移動リスナーオブジェクト
//
class Button_Mouse_Motion_Listener implements MouseMotionListener {
	//
	// GUI部品ソースオブジェクト
	//
	Button so;
	//
	// コンストラクタ:処理するイベントの発生元GUIソースオブジェクトの設定
	//
	Button_Mouse_Motion_Listener(Button so){
		this.so = so;
	}
	//
	// イベントハンドラ本体 for MouseMotionListener
	//
	public void mouseDragged(MouseEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println("mouseDragged at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY()));
		}
	}
	public void mouseMoved(MouseEvent e) {
		if (e.getSource() == so.getObject()){
			System.out.println("mouseMoved at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY()));
		}
	}
}

class JMouseTestMain {
	public static void main(String [] args){
		JMouseTestMain m = new JMouseTestMain();

		Button b = new Button("OK1");
		b.setListener(new Button_Listener(b));
		//
		// マウス用操作イベントハンドラの登録
		//
		b.setMouseListener(new Button_Mouse_Listener(b));
		//
		// マウス用移動イベントハンドラの登録
		//
		b.setMouseMotionListener(new Button_Mouse_Motion_Listener(b));

		JPanel p = new JPanel();
		p.setLayout(new BorderLayout());
		p.add(b.getObject(), BorderLayout.CENTER);

		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new BorderLayout());
		f.setTitle("JButtonTest");
		// f.setSize(200,200);
		f.setLocation(300,300);
		Container c = f.getContentPane();
		c.add(p, BorderLayout.CENTER);
		f.pack();
		f.setVisible(true);
	}
}
  • マウスボタンのプレスリリースクリック、マウスカーソルがオブジェクトに入った出ていったの5種類のイベントを処理するハンドラをaddMouseListener(MouseListener eh)メソッドで登録する。
  • マウスカーソルのドラグ移動の2種類のイベントを処理するハンドラをaddMouseMotionListener(MouseMotionListener eh)メソッドで登録する。
  • addMouseListener()で登録するハンドラオブジェクトはMouseListenerインターフェースをインプリメント(mousePressed()mouseReleased()mouseClicked()mouseEntered()mouseExited()のメソッドを定義)する。
  • addMouseMotionListener()で登録するハンドラオブジェクトはMouseMotionListenerインターフェースをインプリメント(mouseDragged()mouseMoved()のメソッドを定義)する。