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)メソッドは直接呼び出さずに、親クラスであるJPanelのrepaint()メソッドを呼び出す。
マウスイベント処理
//
// 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()のメソッドを定義)する。
[ツッコミを入れる]