e055763
安富 順一
Report#7
[1]課題
1. 偶数奇数判定プログラム(GUIaa)をタイプし、その動作を考察せよ。
2. 例外処理について、考察せよ。
3. 上述のサンプルプログラムに出てきたGUI部品を、全て使ったプログラムを作成せよ。
4. 摂氏から華氏、華氏から摂氏への温度換算ができるプログラムを作成せよ。
5. 「電卓」プログラム。中身は自分の思うように。
[2]解答・実行結果・考察
1.偶奇判定
偶数奇数判定プログラム(GUIaa)をタイプし、その動作を考察せよ。
ソースコード
import java.awt.*;
import java.awt.event.*;
/*GUI関係のパッケージをインポート*/
public class GUIaa extends Frame {
Button b0 = new Button("どっち?");
Label x0 = new Label("適当な数字を入力し、ボタンを押してください。
");
Label x1 = new Label();
TextField t0 = new TextField();
public GUIaa() {
setLayout(null);
add(t0);
t0.setBounds(10,40,90,30);
add(b0);
b0.setBounds(110,40,100,30);
add(x0);
x0.setBounds(10,80,200,30);
add(x1);
x1.setBounds(10,20,200,30);
/*上で生成したオブジェクト群の場所を定義。
(x座標, y座標, 横幅, 縦幅)*/
/*setLayout(null);が無かったら、
上のオブジェクト群の場所が自動的に設定される。*/
b0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int i = (new Integer(t0.getText())).intValue();
t0.setText("");
if(i % 2.0 == 0) {
x1.setText(i + " は偶数です");
}
else {
x1.setText(i + " は奇数です");
}
}
});
}
public static void main(String args[]) {
Frame win = new GUIaa();
win.setSize(300,100);
/*表示するウィンドウの大きさを指定。*/
win.setVisible(true);
/*ウィンドウをディスプレイに表示するために必要。*/
win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
}
実行結果
→
→
考察
- GUIについて
- Graphical User Interfaceの略で、グラフィックス入出力機能を用
いる事のできるインターフェースである。
- ソースを書く際、ウィンドウに出力するためのクラス(ここではFrame
クラス)がすでにインポートされているのでインスタンスを定義したりしな
くてもよいが、Frameクラスを継承したクラスを定義する必要がある。
- ソースに出てくるオブジェクトについて
- Button b0 = new Button("どっち?");は、画面に出力されるものの
内、唯一のボタンで、このボタンを押すと、イベントが生成される。
- Label x0 = new Label("適当な〜");は、画面に出力されるものの内、一
番下にある文字列で、ソースコードでは、この文字列に直接イベント処理後
の文字列が返されるが改良した際に常に表示されるように作った。
- Label x1 = new Label();は、イベント処理後に返される値(文字列など)
を引き継ぐオブジェクトで、処理後の画面上に表示される。
- TextField t0 = new TextField();は、判定する数字を入力するウィンド
ウを表示するオブジェクトである。
- public GUIaa(){}について
- 前述に生成されたオブジェクトをadd();メソッドを用いて定義。
- オブジェクト名.setBounds(x,y,a,b);について
x:ウィンドウ左上を原点としたx座標の位置
y:ウィンドウ左上を原点としたy座標の位置
a:対象のオブジェクトの横幅
b:対象のオブジェクトの縦幅
- setLayout(null);が無かったらウィンドウに自動的にオブジェクトが配
置される。
- ボタンが押されたときの処理(イベント処理)について
- 実際ボタンが押されたときには、actonPerformed()メソッドを、ウィ
ンドウを閉じたときにはwindowClosing()メソッドを呼び出すので、それぞれ
のメソッドを定義すれば、イベント処理の方法を指定することができる。
- このようなメソッドを持つオブジェクト(ここではb0オブジェクトにあ
たる)をアダプタオブジェクトといい、このアダプタオブジェクトを含むク
ラスをアダプタクラスという。
- この偶数奇数判定プログラムでは、まずTextFieldオブジェクトt0に入力
された数字をt0.getText()を用いて、int型の変数iに格納し、iを2で割って
余りが0ならばt1.setTextに(i + "は偶数です");を、余りが1ならば(i + "
は奇数です");を返し、ウィンドウに表示する。
2.例外処理
例外処理について、考察せよ。
ソースコード
import java.awt.*;
import java.awt.event.*;
/*GUI関係のパッケージをインポート*/
public class GUIaa1 extends Frame {
Button b0 = new Button("どっち?");
Label x0 = new Label("適当な数字を入力し、ボタンを押してください。
");
Label x1 = new Label();
TextField t0 = new TextField();
public GUIaa1() {
setLayout(null);
add(t0);
t0.setBounds(10,40,90,30);
add(b0);
b0.setBounds(110,40,100,30);
add(x0);
x0.setBounds(10,80,200,30);
add(x1);
x1.setBounds(10,20,200,30);
/*上で生成したオブジェクト群の場所を定義。
(x座標, y座標, 横幅, 縦幅)。
setLayout(null);が無かったら、
上のオブジェクト群の場所が自動的に設定される。*/
b0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
int i = (new
Integer(t0.getText())).intValue();
if(i % 2 == 0) {
x1.setText(i + " は偶数です");
}
else {
x1.setText(i + " は奇数です");
}
}
catch (NumberFormatException
ex) {
x1.setText("数字を入力してください。");
}
}
});
}
public static void main(String args[]) {
Frame win = new GUIaa1();
win.setSize(300,100);
/*表示するウィンドウの大きさを指定。*/
win.setVisible(true);
/*ウィンドウをディスプレイに表示するために必要。*/
win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
}
実行結果
変更前
→
変更後
→
考察
- プログラムの実行中に発生した問題を通知するために、実行時に生
成されるオブジェクトを例外と呼び、この例外オブジェクトを処理すること
を一般的に例外処理という。
- tryブロックで、例外が生成された場合、例外が投げられる。
- catchブロックの先頭にあるcatchステートメントがこの例外を引数とし
て受け取る。
- tryブロックおよびcatchブロックの例外処理が終了した場合、最後に
finallyブロックが実行される。
- tryブロックがある限り、catchブロックかfinallyブロックはどちらかが
必ず最低でも1つは無ければならない。
3.GUI部品を使ったプログラム
上述のサンプルプログラムに出てきたGUI部品を、全て使ったプログラムを
作成せよ。
ソースコード
import java.awt.*;
import java.awt.event.*;
public class GUI1b extends Frame {
String a,b,c,e,f,g,i,j,k,l,n;
String d = "ちゃんと";
String m = "選択して";
String h = "ください!!";
int re,gr,wh;
Color co_re = new Color(200,0,0);
Color co_gr = new Color(0,200,0);
Color co_wh = new Color(250,250,250);
Label t0 = new Label("日本語→英語にします。");
Label t1 = new Label("↓↓↓");
Checkbox o0 = new Checkbox("Red?");
Checkbox o1 = new Checkbox("Green?");
Choice c0 = new Choice();
Choice c1 = new Choice();
Choice c2 = new Choice();
Button b0 = new Button("GO!!");
TextField f0 = new TextField();
List l0 = new List();
public GUI1b() {
setLayout(null);
add (t0); t0.setBounds(10,40,60,30);
add (o0); o0.setBounds(180,35,60,30);
o0.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
re = evt.getStateChange();
if ( re == 1) { t0.setBackground(co_re); }
else { t0.setBackground(co_wh); }
}
});
add (o1); o1.setBounds(250,35,80,30);
o1.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
gr = evt.getStateChange();
if ( gr == 1 ) { t0.setBackground(co_gr); }
else { t0.setBackground(co_wh); }
}
});
add (c0); c0.setBounds(10,70,100,30);
c0.add("私は"); a = "私は";
c0.add("彼は"); b = "彼は";
c0.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
c = c0.getSelectedItem();
if ( c == a ) { d = "I "; }
else if ( c == b ) { d = "He "; }
}
});
add (c1); c1.setBounds(120,70,100,30);
c1.add("あなたが"); e = "あなたが";
c1.add("Javaが"); f = "Javaが";
c1.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
g = c1.getSelectedItem();
if ( g == e ) { h = "you."; }
else if ( g == f ) { h = "Java."; }
}
});
add (c2); c2.setBounds(230,70,100,30);
c2.add("嫌いです。"); i = "嫌いです。";
c2.add("好きです。"); j = "好きです。";
c2.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
k = c2.getSelectedItem();
if ( k == i ) { m = "hate "; }
else if ( k == j ) { m = "love "; }
}
});
add (b0); b0.setBounds(130,140,100,30);
b0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
n = d + m + h;
f0.setText(n);
}
});
add (t1); t1.setBounds(160,180,60,50);
add (f0); f0.setBounds(10,200,330,70);
add (l0); l0.setBounds(270,300,60,40);
l0.add("も"); l0.add("う"); l0.add("馬太"); l0.add("目");
l0.add("で"); l0.add("す"); l0.add("ね");
}
public static void main(String args[]) {
Frame win = new GUI1b();
win.setSize(350,350);
win.setVisible(true);
win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
}
実行結果
→
考察
- このオリジナルプログラムは、Choiceによって選ばれた項目に対応
した文章を表示するというものである。
- まずChoiceによって選ばれた選択肢によって"私は"なら"I"を、という風
に、対応した文字を、ボタンを押したときに出力するようにした。
4.摂氏→華氏、華氏→摂氏
摂氏から華氏、華氏から摂氏への温度換算ができるプログラムを作成せよ。
ソースコード
import java.awt.*;
import java.awt.event.*;
public class Temp extends Frame {
int a;
String k,l,m,n,o;
TextField t0 = new TextField();
Label l0 = new Label("調べたい温度を入力....");
TextField t1 = new TextField();
Label l1 = new Label("変換結果.....");
Choice c0 = new Choice();
Button b0 = new Button("変換します。");
public Temp() {
setLayout(null);
add (t0); t0.setBounds(10,30,200,40);
add (l0); l0.setBounds(10,80,80,50);
add (c0); c0.setBounds(120,100,150,40);
c0.add("摂氏 → 華氏"); k = "摂氏 → 華氏";
c0.add("華氏 → 摂氏"); l = "華氏 → 摂氏";
c0.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
m = c0.getSelectedItem();
if ( m == k ) { a = 1; }
else if ( m == l ) { a = 0; }
}
});
add (b0); b0.setBounds(120,150,150,40);
b0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if ( a == 1 ) {
try {
int b = (new
Integer(t0.getText())).intValue();
double c = (b*1.8+32);
t1.setText("" + c );
}catch(Exception ex) {
t1.setText("問題発生。\n考えられる問題。\
n1.数字を入力していない。\n2.摂氏 → 華氏のボタンを選択してい
ない。");
}
}
else if ( a == 0 ) {
try {
int b = (new
Integer(t0.getText())).intValue();
double c = (b-32)/1.8;
t1.setText(""+ c );
}catch(Exception ex) {
t1.setText("問題発生。\n考えられる問題。\
n1.数字を入力していない。\n2.摂氏 → 華氏のボタンを選択してい
ない。");
}
}
}
});
add (l1); l1.setBounds(180,200,80,40);
add (t1); t1.setBounds(180,230,200,40);
}
public static void main(String args[]) {
Frame win = new Temp();
win.setSize(400,290);
win.setVisible(true);
win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
}
実行結果
考察
- このプログラムは摂氏、華氏、相互変換プログラムである。
- まず、Choiceの選択肢を選んだ際、その選択された項目がソースに書い
てある通り、対象の文字列と比較され、条件が合えば、変数aに対応した数字
が返される。
- この変数aは、後のボタンが押された際に判別に用いられる値となる。
- 最後の変換のボタンを押した際に起きるイベントについて、まずはaが1
なのか0なのかで判別し、1の場合は画面に入力された値を
getSelectedItem()により、変数bに格納。
- 次に、変数bを用いて、cに計算した値を格納。
- 最後に、cを引数としてt1.setText()で出力。
- aが2のときも同様である。
- aが1、2どちらの場合も変数bに格納されるべき値が数字以外だと、例
外処理により、エラーメッセージを出力する。
5.電卓
「電卓」プログラム。中身は自分の思うように。
ソースコード
import java.awt.*;
import java.awt.event.*;
public class Cal extends Frame {
int a;
String k,l,m,n,o;
TextField t0 = new TextField();
TextField t1 = new TextField();
Label l0 = new Label("result...");
Label l1 = new Label();
Choice c0 = new Choice();
Button b0 = new Button(" = ");
public Cal() {
setLayout(null);
add (t0); t0.setBounds(10,30,50,40);
add (c0); c0.setBounds(70,30,50,40);
c0.add(" + "); k = " + ";
c0.add(" ー "); l = " ー ";
c0.add(" × "); m = " × ";
c0.add(" ÷ "); n = " ÷ ";
c0.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
o = c0.getSelectedItem();
if ( o == k ) { a = 1; }
else if ( o == l ) { a = 2; }
else if ( o == m ) { a = 3; }
else if ( o == n ) { a = 4; }
}
});
add (t1); t1.setBounds(150,30,50,40);
add (b0); b0.setBounds(210,30,50,40);
b0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if ( a == 1 ) {
try {
int b = (new
Integer(t0.getText())).intValue();
int c = (new
Integer(t1.getText())).intValue();
double d = b + c;
l0.setText("" + d);
l1.setText("こうなりました");
}catch(Exception ex) {
l0.setText("");
l1.setText("Error....\n1.数字を入力してく
ださい。\n2.演算の方法を選んでください。");
}
}
else if ( a == 2 ) {
try {
int b = (new
Integer(t0.getText())).intValue();
int c = (new
Integer(t1.getText())).intValue();
double d = b - c;
l0.setText("" + d);
l1.setText("こうなりました");
}catch(Exception ex) {
l0.setText("");
l1.setText("Error....\n1.数字を入力してく
ださい。\n2.演算の方法を選んでください。");
}
}
else if ( a == 3 ) {
try {
int b = (new
Integer(t0.getText())).intValue();
int c = (new
Integer(t1.getText())).intValue();
double d = b * c;
l0.setText("" + d);
l1.setText("こうなりました");
}catch(Exception ex) {
l0.setText("");
l1.setText("Error....\n1.数字を入力してく
ださい。\n2.演算の方法を選んでください。");
}
}
else if ( a == 4 ) {
try {
int b = (new
Integer(t0.getText())).intValue();
int c = (new
Integer(t1.getText())).intValue();
double d = b / c;
l0.setText("" + d);
l1.setText("こうなりました");
}catch(Exception ex) {
l0.setText("");
l1.setText("Error....\n1.数字を入力してく
ださい。\n2.演算の方法を選んでください。");
}
}
else { l1.setText("Error....\n1.数字を入力してく
ださい。\n2.演算の方法を選んでください。");
}
}
});
add (l0); l0.setBounds(270,30,50,40);
add (l1); l1.setBounds(10,70,330,100);
}
public static void main(String args[]) {
Frame win = new Cal();
win.setSize(330,120);
win.setVisible(true);
win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
}
実行結果
考察
- 四則演算プログラムである。
- 書いてあることは課題3、4とだいたい同じである。
[3]感想
実行結果が文字化けしてしまったときはあせった。
でもそのおかげで、eclipseの使い方が分かってよかった。
[4]参考文献
- 独習Java 第3版 ジョゼフ・オニール著 翔泳社
PukiWiki
プログラミングIIへ
とっぷにもどる